Spec-Zone .ru
спецификации, руководства, описания, API
|
Много программ не интернационализируются когда сначала записано. Эти программы, возможно, запустились как прототипы, или возможно они не были предназначены для международной дистрибуции. Если следует интернационализировать существующую программу, сделайте следующие шаги:
Текстовые сообщения являются самой очевидной формой данных, которые меняются в зависимости от культуры. Однако, другие типы данных могут меняться в зависимости от области или языка. Следующий список содержит примеры культурно зависимых данных:
Преобразование является дорогостоящим. Можно помочь уменьшить затраты, изолируя текст, который должен быть преобразован в ResourceBundle
объекты. Переводимый текст включает сообщения о состоянии, сообщения об ошибках, записи файла журнала, и компонентные метки GUI. Этот текст является hardcoded в программы, которые не интернационализировались. Вы должны определить местоположение всех возникновений hardcoded текста, который выводится на экран к конечным пользователям. Например, следует очистить код как это:
String buttonLabel = "OK"; // ... JButton okButton = new JButton(buttonLabel);
См., что раздел Изолирует Специфичные для локали Данные для деталей.
Составные сообщения содержат переменные данные. В сообщении "Диск содержит 1100 файлов." целое число 1100 может измениться. Это сообщение трудно преобразовать, потому что позиция целого числа в предложении не является тем же самым на всех языках. Следующее сообщение не переводимо, потому что порядок элементов предложения является hardcoded связью:
Integer fileCount; // ... String diskStatus = "The disk contains " + fileCount.toString() + " files";
Когда бы ни было возможно следует избежать создавать составные сообщения, потому что их трудно преобразовать. Однако, если Ваше приложение требует составных сообщений, можно обработать их с методами, описанными в сообщениях раздела.
Если Ваше приложение выводит на экран числа и валюты, следует отформатировать их независимым от локали способом. Следующий код еще не интернационализируется, потому что он не будет выводить на экран число правильно во всех странах:
Double amount; TextField amountField; // ... String displayAmount = amount.toString(); amountField.setText(displayAmount);
Следует заменить предыдущий код подпрограммой, которая форматирует число правильно. Язык программирования Java обеспечивает несколько классов, которые форматируют числа и валюты. Эти классы обсуждаются в Числах раздела и Валютах.
Дата и форматы времени не соглашаются с областью и языком. Если Ваш код содержит операторы как следующий, Вы должны изменить его:
Date currentDate = new Date(); TextField dateField; // ... String dateString = currentDate.toString(); dateField.setText(dateString);
Если Вы используете форматирующие дату классы, Ваше приложение может вывести на экран даты и времена правильно во всем мире. Для примеров и инструкций, см. Даты раздела и Времена.
Следующий код пытается проверить, что символ является буквой:
char ch; // This code is incorrect if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
Не упустите код как это, потому что он не будет работать с языками кроме английского языка. Например, if
оператор пропускает символ ü в немецком слове Grün.
Character
методы сравнения используют стандарт Unicode, чтобы идентифицировать символьные свойства. Таким образом следует заменить предыдущий код следующим:
char ch; // ... if (Character.isLetter(ch))
Для получения дополнительной информации по Character
методы сравнения, см., что раздел Проверяет Символьные Свойства.
Сортируя текст Вы часто сравниваете строки. Если текст выводится на экран, недопустимо использовать методы сравнения String
class. Программа, которая не интернационализировалась, могла бы сравнить строки следующим образом:
String target; String candidate; // ... if (target.equals(candidate)) { // ... if (target.compareTo(candidate) < 0) { // ...
String.equals
и String.compareTo
методы выполняют двоичные сравнения, которые неэффективны, сортируя на большинстве языков. Вместо этого следует использовать Collator
class, который описывается в Строках Сравнения раздела.
Символы в языке программирования Java кодируются в Unicode. Если Ваше приложение обрабатывает текст не-Unicode, Вы, возможно, должны были бы преобразовать это в Unicode. Для получения дополнительной информации см., что раздел Преобразовывает текст неUnicode.