add language support
still have some bugs