×
Namespaces

Variants
Actions

Интернационализация

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

Статья
Перевод:
Оригинал: Internationalization
Последнее редактирование: hamishwillee (09 Dec 2011)


Internationalization (I18N - 18 число букв в слове между I и N)

Определение

Интернационализация - это методология разработки ПО, цель которой свести к минимуму затраты, связанные с поддержкой разных языков. Процесс переработки ПО для поддержки разных языков называется локализацией (Localization - L10N). Интернационализация требует особого внимания при проектировании некоторых аспектов ПО, об этом ниже.

Руководство для разработчиков

Цель интернационализации - упростить поддержку разных языков для ваших приложений, причем не столько языков, сколько локалей (locales) в целом. Локаль включает в себя не только язык, на котором базируется, но и различные региональные соглашения по представлению тех или иных данных. Рассмотрим, например, локали США (en_US) и Великобритании (en_UK). Обе базируются на английском языке, однако между ними есть различия - символом валюты для US является знак долара ("$"), в то время как для UK это знак фунта. Представление даты также разнится (для UK, обычно, используется формат ДД/ММ/ГГГГ, в то время как для US ММ/ДД/ГГГГ).

При разработке приложения, для упрощения его последующей локализации, нужно:

  • Уделять особое внимание данным, представление которых зависит от текущей локали. Такими данными, являются: дата, время, денежные знаки, формы десятичного представления и т.д.
  • Понимать концепцию локалей, как они представлены в S60.
  • Представлять, как приложение использует файлы ресурсов.
  • Знать каким образом подготовить ресурсы для их дальнейшего перевода на другие языки.

С самого начала разработки необходимо определенным образом работать с данными, представление которых не является универсальным для всех локалей. Помимо даты, времени, символов валюты, таковым является весь видимый пользователю текст. Иногда изображения и звуки, используемые в программе, также могут зависеть от локали (имена файлов).

Для корректного представления данных, отображение которых зависит от текущей локали, нужно использовать классы из Locale Settings API. Примеры классов:

  • TLocale
  • TLanguage
  • tday, TDateName и tdayNameAbb
  • TMonth, TMonthName и TMonthNameAbb
  • TDateSuffix
  • TAmPmName
  • TCurrencySymbol

Разработчик должен учитывать, что весь текст, видимый пользователем, а также все зависимые от локали данные, на одном языке могут занимать больше (или меньше) места, чем на другом и, соответственно, больше (или меньше) памяти. Поэтому нельзя использовать текстовые буферы фиксированных размеров. Везде, где это возможно, нужно использовать динамические буферы.

Два примера создания динамических текстовых буферов, оба метода сохраняют указатели на созданные буферы в стеке очистки:

HBufC* message = StringLoader::LoadLC(R_DIALOG_TEXT);
HBufC* msg1 = iEikonEnv->AllocReadResourceLC(R_MY_TEXT_01);

Оба варианта загружают строку из ресурсов, при этом не указывают размер HBufC в коде.

CCoeEnv::AllocReadResourceLC() - традиционный метод Symbian OS, часто используется в старом коде.

Класс StringLoader - это новшество для S60, предоставляет более гибкое API, поддерживает форматирование строк.


Поддержка локализации на уровне ОС

Запомните - главный аспект интернационализации заключается в том, что файлы ресурсов не загружаются до выполнения. Поддерживается специальная возможность, благодаря которой можно использоваться множество ресурсных файлов, каждый из которых может быть предназначен для определенной локали. Каждый откомпилированный ресурсный файл именуется как *.r01, *.r02, *.r03 и т.д. Расширение файлов зависит от языка, например: 01 - английский, 02 - французский и т.д. После загрузки приложения, система определяет, какой файл ресурсов необходимо использовать в зависимости от текущей локали.

Обычный способ создания независимого от локалей .rss-файла заключается в том, что в нем не содержится "защитых" текстовых строк. Вместо этого, все зависимые от локалей данные группируются в разных .loc-файлах, который затем включаются в .rss-файл следующим образом:

#ifdef LANGUAGE_01
 
#include "Language.l01"
 
#endif
 
#ifdef LANGUAGE_02
 
#include "Language.l02"
 
#endif
 
#ifdef LANGUAGE_03
 
#include "Language.l03"
 
#endif
 
#ifdef LANGUAGE_06
 
#include "Language.l06"
 
#endif

.mmp-файл проекта должен содержать перечень всех локалей, для которых компилируется приложение.

This page was last modified on 9 December 2011, at 01:14.
42 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×