Описание локализованных списков в базе

Иногда в приложении требуется изменять отображаемые строки не только в 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);

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.