Как я могу преобразовать код языка IETF BCP 47 в строку отображения? - PullRequest
3 голосов
/ 01 декабря 2011

Как я могу преобразовать код языка IETF BCP 47 [например, zh-cmn-Hant-HK] в строку отображения [например, "китайский, традиционный (Гонконг, ОАР)")] в Android (Java)?

Некоторый фон.Я работаю с речью к текстовым API.Я звоню sendOrderedBroadcast, передавая BroadcastReceiver, который получает список поддерживаемых языков через RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES.EXTRA_SUPPORTED_LANGUAGES предоставляются в виде кодов IETF BCP 47, а не кодов локали Java: http://developer.android.com/reference/android/speech/RecognizerIntent.html

Какую поддержку Android обеспечивает работа с кодами IETF BCP 47?Я особенно заинтересован в получении отображаемых имен, как показано в примере выше.

1 Ответ

3 голосов
/ 01 декабря 2011

Нет поддержки в Android. И вообще я не думаю, что вы найдете такую ​​поддержку вне ICU.

Итак, у вас есть два варианта: ICU4J или ICU4C.

Для ICU4J вы должны принести свою собственную копию, потому что ее там нет.

ICU4C присутствует в Android (все функции интернационализации в Dalvik реализованы поверх него). Вы можете использовать NDK (Native Development Kit) для вызова ICU4C из модуля C / C ++ и использовать JNI для доступа к вашему собственному модулю из Java. Но хотя ICU4C присутствует там по умолчанию, Android не раскрывает его, и его использование настоятельно не рекомендуется. Не говоря уже о том, что файл данных ICU4C может быть значительно сокращен, поэтому информация, необходимая для написания кода bcp 47, может отсутствовать.

Так что самая безопасная вещь - это ваша собственная копия ICU4J. Вы можете либо развернуть его вместе со своим приложением, либо предоставить эту информацию в виде веб-службы для своего приложения.

...