==i-locale.xsl

===Описание
Модуль, обеспечивающий локализацию в Лего.

{{TOC}}

===Локализация
На этой странице описан xsl'ный модуль ##i-locale.xsl##. Про вообще локализацию ((../../../localization.wiki смотреть тут)).



===Функция lego:message()
Функция ##lego:message()## предназначена для вывода сообщения в языке установленной локали. Она является оберткой над именованным шаблоном ##lego:message##:
%%(html)
<func:function name="lego:message">
<xsl:param name="id"/>
<xsl:param name="text"/>
    <func:result>
        <xsl:call-template name="lego:message">
            <xsl:with-param name="id" select="$id"/>
            <xsl:with-param name="text" select="$text"/>
        </xsl:call-template>
    </func:result>
</func:function>
%%

===Шаблон lego:message в i-common.xsl
Шаблон определен в i-common.xsl следующим образом:
%%(html)
<xsl:template name="lego:message">
<xsl:param name="id"/>
<xsl:param name="text"/>
    <xsl:value-of select="$text"/>
</xsl:template>
%%
Т.е. он принимает два параметра: ##id## -- идентификатор строки, ##text## -- текст этой строки для **русской** локали. Использование:
%%(html)
    <xsl:value-of select="lego:message('b-head-userinfo-setup', 'Настройка')"/>
%%
Если установлена русская локаль (а это значение по-дефолту) и в xsl не подключен файл ##i-locale.xsl##, то первый параметр просто игнорируется, а сразу выводится второй параметр.

Зачем это нужно. Чтобы
  1. Иметь единый интерфейс локализации строк в Лего.
  2. В русской локали (наиболее используемой -- большинство проектов не имеют локализации) не подключать лишних xml'ей со строками, не создавать лишних ключей и т.д. Короче говоря, для оптимизации.

===Шаблон lego:message в i-locale.xsl
Шаблон определен вот так:
%%(html)
<xsl:key name="lego:messages" match="lego:messages/lego:message" use="@id"/>
<xsl:variable name="lego:root" select="/"/>

<xsl:template name="lego:message">
<xsl:param name="id"/>
<xsl:param name="text"/>
    <xsl:choose>
        <xsl:when test="$lego:locale = 'ru'">
            <xsl:value-of select="$text"/>
        </xsl:when>
        <xsl:otherwise>
            <xsl:for-each select="$lego:root">
                <xsl:value-of select="key('lego:messages', $id)"/>
            </xsl:for-each>
        </xsl:otherwise>
    </xsl:choose>
</xsl:template>
%%
Т.е. для русской локали по-прежнему используется второй параметр, а для остальных локалей значение строки извлекается ключем ##lego:messages## по переданному ##id##.

===Файлы ##messages.*.xml##
Файлы с локализационными строками находятся в ##common/block/i-messages/messages.*.xml##.
Формат файлов вот такой:
%%(html)
<lego:messages xml:lang="ru" xmlns:lego="https://lego.yandex-team.ru">
    <lego:message id="b-head-logo-yandex">Яндекс</lego:message>
    <lego:message id="b-dropdown-more">ещё</lego:message>
    <lego:message id="b-dropdown-or">или</lego:message>
    <lego:message id="b-head-search-button-value">Найти</lego:message>
    ...
%%

Как правило проекты локализуют свои строки самостоятельно и все вышеописанное применимо только к строкам в шапке (а также подвале и других лего-компонентах). Но ничего не мешает пользоваться этим механизмом не только для лего-компонент. Для этого нужно:
  * Подключить в xml'е блок со строками в зависимости от локали.
  * Подключить в xsl'е ##i-locale.xsl##.
  * ((../i-common/i-common.xsl Переключить в xsl'е локаль на нужную))

