Как вы справляетесь с интернационализацией для "Ваш ввод" XYZ "отлично!" - PullRequest
9 голосов
/ 21 июля 2010

Я хотел бы знать, как правильно обрабатывать интернационализацию для операторов с добавленными в них данными времени выполнения.Например 1) Ваш ввод "xyz" отличный!2) Вам было «4 года», когда вы переключились с шоу «Барни и Фрейндс» на «Губка Боб».

Двойные кавычки - это данные пользователя, полученные или рассчитанные во время выполнения.Мои платформы в основном Java / Android.Правильное решение для западных языков предпочтительнее более слабого универсального.

Ответы [ 3 ]

12 голосов
/ 21 июля 2010

Java

Чтобы получить локализованный текст (сообщения), используйте API java.util.ResourceBundle. Для форматирования сообщений используйте java.text.MessageFormat API.

По сути, сначала создайте файл свойств примерно так:

key1 = Your input {0} is excellent!
key2 = You were {0} old when you switched from {1} to {2} shows.

{n} вещи являются заполнителями для аргументов, которые вы можете передать с помощью MessageFormat#format().

Затем загрузите его так:

ResourceBundle bundle = ResourceBundle.getBundle("filename", Locale.ENGLISH);

Затем, чтобы получить сообщения по ключу, выполните:

String key1 = bundle.getString("key1");
String key2 = bundle.getString("key2");

Затем, чтобы отформатировать его, выполните:

String formattedKey1 = MessageFormat.format(key1, "xyz");
String formattedKey2 = MessageFormat.format(key2, "4 years", "Barney and Friends", "Spongebob");

Смотри также:


Android

Что касается Android, процесс проще. Вам просто нужно поместить все эти String сообщения в файл res/values/strings.xml. Затем вы можете создать версию этого файла на разных языках и поместить файл в папку values, содержащую код языка. Например, если вы хотите добавить поддержку испанского, вам просто нужно создать папку с именем res/values-es/ и поместить туда испанскую версию вашего strings.xml. Android автоматически решит, какой файл использовать, в зависимости от конфигурации телефона.

Смотри также:

3 голосов
/ 21 июля 2010

Одно нетехническое соображение.Встраивание бесплатных данных в английские фразы не будет выглядеть очень гладко во многих культурах (включая западные), где вам нужно грамматическое соглашение, например, о числе, поле или регистре.Обычно помогает более телеграфный стиль (например, Отличный ввод: "xyz") - тогда, по крайней мере, все получают одинаковый уровень грубости!

0 голосов
/ 21 июля 2010

Я думаю, что, вероятно, придется определить строку формата, чтобы включить функцию «1-из-N», предпочтительно определенную так, чтобы облегчить общие случаи (например, множественное число). Например, определите {0 # string1 / string2 / string3} для вывода string1, если параметр 0 равен нулю или меньше, string2, если он точно равен 1, и string3, если он больше 1}. Тогда можно было бы сказать «У вас в ящике {0} {0 # ножи / нож / ножи}» *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...