rename data getter, add dynamic language, add register() method