Локализация

Локализация плагинов выполняется с помощью xml-файлов, заполняемых по определенным правилам.

Для выполнения локализации клонируйте репозиторий Core_LanguageFiles и создайте новую ветку. Создание ветки требуется для последующего создания Pull Request.

В проекте LanguageFiles расположены файлы локализации (en-US.xml, ru-RU.xml и т.д.). При локализации плагинов необходимо вносить изменения во все файла локализации.

После внесения изменений в файлы локализации проекта LanguageFiles скопируйте эти файлы в папку /ModPlus/Languages установленной версии ModPlus. После этого вы можете протестировать результат локализации.

Каждый файл содержит корневой элемент ModPlus (его редактировать не надо!) и вложенные элементы. Каждый вложенный элемент относится к отдельному компоненту ModPlus, включая плагины.

Создайте новый вложенный xml-элемент с именем плагина (см. правила именования плагинов) или найдите существующий в случае, если вы вносите изменение.

 

<mprWorksets>

</mprWorksets>

Каждый xml-элемент для плагина должен содержать обязательные атрибуты и может содержать дополнительные атрибуты:

Обязательные атрибуты:

- LocalName – локализованное имя плагина

- Description – краткое обязательное описание плагина

Дополнительные атрибуты (создаются при необходимости):

- FullDescription – полное описание плагина

- LocalNameN, DescriptionN, FullDescriptionN – локализованное имя, описание и полное описание для под-плагины. N – целое число, указывающее порядковый номер под-плагина. Данные атрибуты нужно использовать, если разрабатываемый плагин содержит дополнительные команды.

Пример плагина с дополнительными командами:

<mprDimByLine LocalName="Dimensions by line"
              Description="Placing dimensions along the specified line"
              FullDescription="Plugin allows you to place dimensions on the plan or section view along the conditional line formed by the two indicated points. Elements that will be dimensioned and ways of dimensioning (in the center and/or on the extreme sides) are specified in the working configuration"
              LocalName1="Dimensions by line. Settings"
              Description1="Working configuration settings for dimensions by line">
…

 

Пример плагина без дополнительных команд: 

<mprWorksets LocalName="Worksets"
             Description="Manage, create, and apply worksets"
             FullDescription="The plugin allows you to create workset configurations that you can use to create worksets in a document. Configurations can be imported and exported. For each workset in the configuration, you can specify the conditions for applying the workset to an element">
…

Далее внутри xml элемента для плагина создайте xml элементы для локализованных выражений, которые зависят от текущего языка. Имена xml элементов являются их ключами и должны быть уникальными в рамках xml элемента для плагина.

Пример:

 

<mprWorksets LocalName="…"
             Description="…"
             FullDescription="…"
  <yes>Yes</yes>
  <no>No</no>
  <t1>Rename configuration</t1>
  <t2>Create new configuration</t2>
  <t3>Import configuration</t3>
  <t4>Export configuration</t4>
  <t5>Remove configuration</t5>
  <msg1>Remove?</msg1>
  <msg2>The current configuration "{0}" will be permanently deleted!</msg2>
</mprWorksets>

 

Использование в xaml-разметке

Для использования в xaml-разметке в ресурсах окна (или пользовательского элемента) создайте добавьте XmlDataProvider следующего содержания:

 

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/ModPlusStyle;component/Styles/Controls.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <XmlDataProvider x:Key="Lang" Source="E:/ModPlus/Languages/en-US.xml" XPath="ModPlus/mprWorksets" />
    </ResourceDictionary>
</Window.Resources>

Где:

- x:Key – задает уникальный ключ для использования в разметке (см. далее)

- Source – укажите путь к файлу локализации на компьютере. Задание этого свойства нужно для отображения результатов в редакторе окна и не влияет на работу плагина

- XPath – уникальный путь к нужному xml-элементу в файле.

Для использования локализованного значения в разметке используйте привязку:

ToolTip="{Binding Source={StaticResource Lang}, XPath=t1}"

Где t1 – имя xml-элемента локализованного выражения

 

Использование в коде

Для использования в коде используйте метод ModPlusAPI.Language.GetItem(string item, string id). Первым параметром указывается xml-элемент плагина в файле локализации, вторым параметром указывается xml-элемент локализованного выражения в элементе плагина.

В следующем примере также показывается использование метода string.Format():

 

private const string LangItem = "mprWorksets";
…
if (await ParentWindow.ShowMessageAsync(
        ModPlusAPI.Language.GetItem(LangItem, "msg1"),
        string.Format(ModPlusAPI.Language.GetItem(LangItem, "msg1"), CurrentWorksetConfiguration.Name),
        MessageDialogStyle.AffirmativeAndNegative,
        new MetroDialogSettings
        {
            AffirmativeButtonText = ModPlusAPI.Language.GetItem(LangItem, "yes"),
            NegativeButtonText = ModPlusAPI.Language.GetItem(LangItem, "no")
        }) == MessageDialogResult.Affirmative)
{
    WorksetConfigurations.Remove(CurrentWorksetConfiguration);
    SaveUserConfigurations();
}

 

Использование метода string.Format

Вы можете в локализованных выражениях писать строки составного форматирования для последующей вставки объектов в строку. Подробнее о составном форматировании читайте на MSDN. Пример использования приведен выше

 

Использование специальных символов

Если локализованное выражение будет использоваться только в коде, то вы можете использовать в выражении специальные символы. Например, символ перехода на новую строку \n.

Если условное выражение будет использовано в xaml-разметке и требуется использование специальные символы, вы можете использовать hex-коды. Например, hex-код перехода на новую строку &#x0a;.

Для вставки кавычек использовать символы не требуется

© 2018-2019 modplus.org

Please publish modules in offcanvas position.