Описание локализованных списков в базе
Иногда в приложении требуется изменять отображаемые строки не только в UI элементах – это делается либо настройкой списка слов и словаря, либо нативным для конкретной платформы подходом – но и сами заголовки статей списка слов.
Обычно это требуется для:
- смены строк при смене локализации на устройстве
- разных при отображении списков слов на разных платформах
Подобный функционал реализуется на основе иерархических списков, для этого:
- в файле проекта указывается флаг <isListHasLocalizedEntries>YES</isListHasLocalizedEntries>
- там же добавляется вариант написания с типом <Type>Localization</Type>
- в xml локализуемого списка слов добавляется новый уровень иерархии:
<List>
<article id="additional_articles_english">
<wl-name />
<wl-name>engl</wl-name>
</article>
<Level depth="1">
<article id="additional_article_grammar">
<id>add_art_grammar</id>
<wl-name>Grammar</wl-name>
<wl-name />
</article>
<article id="additional_article_about">
<id>add_art_about</id>
<wl-name>About</wl-name>
<wl-name />
</article>
<article id="additional_article_irregular_verbs">
<id>add_art_irreg_verbs</id>
<wl-name>Table of irregular verbs</wl-name>
<wl-name />
</article>
</Level>
<article id="add_art_0000">
<wl-name />
<wl-name>0000</wl-name>
</article>
<Level depth="1">
<article id="additional_article_grammar">
<id>add_art_grammar</id>
<wl-name>Grammar</wl-name>
<wl-name />
</article>
<article id="additional_article_about">
<id>add_art_about</id>
<wl-name>About</wl-name>
<wl-name />
</article>
<article id="additional_article_irregular_verbs">
<id>add_art_irreg_verbs</id>
<wl-name>Table of irregular verbs</wl-name>
<wl-name />
</article>
</Level>
<article id="add_art_0000">
<wl-name />
<wl-name>russ;iOS</wl-name>
</article>
<Level depth="1">
<article id="additional_article_grammar_ru_iOS">
<id>add_art_grammar</id>
<wl-name>Грамматический справочник</wl-name>
<wl-name />
</article>
<article id="additional_article_about_ru_iOS">
<id>add_art_about</id>
<wl-name>О словаре (iOS)</wl-name>
<wl-name />
</article>
<article id="additional_article_irregular_verbs_ru_iOS">
<id>add_art_irreg_verbs</id>
<wl-name>Таблица неправильных глаголов</wl-name>
<wl-name />
</article>
</Level>
<article id="add_art_0000">
<wl-name />
<wl-name>russ;Android</wl-name>
</article>
<Level depth="1">
<article id="additional_article_grammar_ru_android">
<id>add_art_grammar</id>
<wl-name>Грамматический справочник</wl-name>
<wl-name />
</article>
<article id="additional_article_about_ru_android">
<id>add_art_about</id>
<wl-name>О словаре (iOS)</wl-name>
<wl-name />
</article>
<article id="additional_article_irregular_verbs_ru_android">
<id>add_art_irreg_verbs</id>
<wl-name>Таблица неправильных глаголов</wl-name>
<wl-name />
</article>
</Level>
</List>
- у корневых папок локализаций указывается строка, на основе которой будет происходить переключение на данную локализацию (обычно это код языка). У вложенных элементов, которыми могут быть как статьи, так и папки основной иерархии списка, эта строка не указывается
Как видно из примера, строкой-идентификатором может служить не только код языка, но и целый набор атрибутов, перечисленных через “;”. В этом случае при переключении будут учитываться они все. Сами атрибуты дополнительно не типизируются и предполагается, что они известны вызывающей платформе.
Информация для разработчиков
Локализация переключается через следующие функции CSldDictionary
/// Устанавливает нужную локализацию записей по переданному языковому коду
ESldError SetLocalization(ESldLanguage aLocalizationLangCode);
/// Устанавливает нужную локализацию записей по переданному языковому коду и набору настроек
ESldError SetLocalization(ESldLanguage aLocalizationLangCode, const UInt16* aLocalizationDetails);