Я хотел бы знать то, что является правильным способом обработать интернационализацию для операторов с данными во время выполнения, добавленными к нему. Например 1) Ваш вход "xyz" превосходен! 2) Вы были "4 годами", старыми, когда Вы переключились от "Barney и Freinds" к шоу "Губки Боба".
Двойные заключенные в кавычки значения являются пользовательскими данными, полученными или расчетными во время выполнения. Мои платформы являются, прежде всего, Java/Android. Правильное решение для Западных языков предпочтено по более слабому универсальному.
Для получения локализованного текста (сообщений) используйте 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, то процесс проще. Вам просто нужно поместить все эти сообщения String
в файл res / values / strings.xml
. Затем вы можете создать версию этого файла на разных языках и поместить файл в папку values
, содержащую код языка. Например, если вы хотите добавить поддержку испанского, вам просто нужно создать папку с именем res / values-es /
и поместить туда испанскую версию вашего strings.xml
. Android автоматически решит, какой файл использовать, в зависимости от конфигурации телефона.
Одно нетехническое соображение. Встраивание бесплатных данных в английские фразы не будет выглядеть очень гладко во многих культурах (включая западные), где вам нужно грамматическое согласие, например. число, пол или регистр. Обычно помогает более телеграфный стиль (например, отличный ввод: «xyz») - тогда, по крайней мере, все получают одинаковый уровень неуклюжести!
Я думаю, что, вероятно, придется определить свою форматную строку, чтобы она включала функцию "1-of-N", желательно определенную так, чтобы упростить общие случаи (например, множественные числа). Например, определить {0#string1/string2/string3} для вывода строки1, если параметр 0 равен нулю или меньше, строки2, если он точно равен 1, и строки3, если он больше 1}. Тогда можно сказать: "У вас в ящике {0} {0#ножи/нож/ножи}"
.