Войти
Urho3DФорумURHOSHARP

UrhoSharp Auto Localizable - как ?

#0
13:01, 23 дек. 2016

Здравствуйте
Помогите мне пожалуйста понять, как происходит локализация в UrhoSharp ?

К примеру у меня есть хмл

    <element type="Text">
      <attribute name="Horiz Alignment" value="Center" />
      <attribute name="Vert Alignment" value="Center" />
      <attribute name="Text" value="Main" />
      <attribute name="Auto Localizable" value="true" />
    </element>

Еще есть в главном проэкте AppResources.resx и AppResources.ru.resx где написан перевод слова "Main" на разные языки. Я туда добавил слову "Main" перевод: "Main menu" и "Главное меню"
Я так понимаю, по дефолту будет использоваться AppResources.resx (там где английский перевод текстов)

Но при запуске появляется тектовое поле с надписью "Main", а не "Main menu"

Как мне задействовать этот механизм "Auto Localizable" ?

Спасибо!


#1
13:06, 23 дек. 2016

Мне кажется интуитивно что связки тут пока нет. Надо что то городить самому.

#2
13:34, 23 дек. 2016

Ну мне пришло на ум что-то типа перегрузить LoadLayoutToElement и LoadLayout - добавить цикл, который рекурсивно пробежится по всем элементам типа текста и изменит значение на локализованное, но это опять костыль.
А я так хочу написать что-то хорошее, ну хоть разок.

#3
13:38, 23 дек. 2016

В идеале наверно хотелось бы binding как в xaml?

#4
13:53, 23 дек. 2016

Нет, в идеале хотелось бы поставить галочку "Auto Localizable" и всё :) 
Но можно и как в xaml  <attribute name="Text" value="{чет там в фигурных скобках}" />

#5
14:31, 23 дек. 2016

j-nox
Вместо рекурсивного обхода можно XPath запрос сделать и в цикле пробежать.

#6
16:02, 23 дек. 2016

Я автор этой подсистемы для локализации, но могу только объяснить как оно в обычном урхо работает, а что за AppResources.resx и откуда там чего берется в урхошарп я не знаю)

#7
16:17, 23 дек. 2016

В папке Data есть файлы StringsDe.json StringsEnRu.json EditorStrings.json, естсественно можешь свои файлы добавить

Формат у них очень простой

  "Идентификатор":{
    "язык1":"Перевод",
    "язык2":"Перевод",
                ...
  }

Итак в урхо есть класс Text, который представляет текстовую строку в интерфейсе, а также есть класс Text3D, для отображения текста в 3D сцене. Внтури класса Text3D находится тот же объект типа Text, так что вся эта автолкализация реализована через класс Text.

Итак если у объекта text значние = "Идентификатор" и включен флаг autolocalzable, то там в зависмости от выбранного языка тупо подставляется "Перевод" вместо "Идетификатор".

Идентифкатор может быть любым. Язык1, язык 2 и так далее тоже может быть любой строкой. Если словари с переводами хранятся в нескольких файлах, то при загрузке все это дело все равно загружается в одну таблицу. Несколько файлов удобны если ты хочешь хранить перевод на каждый язык в отдельном файле.

При загрузке файлов составляется список языков в порядке их нахождения. То  есть там могут быть не только "en", "ru", но и "киргуду" и что угодно.

Как загружаются файлы, как сменить текущий язык можно посмотреть в 40 примере (естественно в оригинальной версии движка, на урхошарп вроде бы тоже портирован пример). Язык можно выбрать как по номеру так и по строковому идентификатору.

Также помимо флага autolocalizable для text есть другой способ, который можно использовать в других местах.

localization->Get("идентификатор") вовзращает перевод "идентификатор" на язык, который выбран на данный момент.

Помимо примера также справку смотри https://urho3d.github.io/documentation/HEAD/_localization.html

#8
16:39, 23 дек. 2016

Класс! спасибо!

#9
18:22, 25 дек. 2016

Через какое-то время я понял, что локалиизация не была портирована в UrhoSharp, или я её просто не нашел. Ж)

Я даже скачал сорцы urhosharp и там не было ничего похожего на GetLanguage

Но в логе отладки есть что-то любопытное
....
12-25 16:38:21.279 D/Mono    ( 2866): DllImport searching in: 'mono-urho' ('/data/data/unicornkiller.Droid/files/.__override__/libmono-urho.so').
12-25 16:38:21.279 D/Mono    ( 2866): Searching for 'UIElement_GetName'.
12-25 16:38:21.279 D/Mono    ( 2866): Probing 'UIElement_GetName'.
12-25 16:38:21.279 D/Mono    ( 2866): Found as 'UIElement_GetName'.
12-25 16:38:21.289 W/Urho3D  ( 2866): Localization::Get(id): no loaded languages

#10
20:04, 25 дек. 2016

Базы данных тоже не портированы, nagg говорил типа нафига, в C# и так с базами данных порядок, может и для локализации там своя примочка какая-то

#11
20:14, 25 дек. 2016

Есть свой механизм локализаций, я выше писал про  AppResources.resx, но он никак не связан Urho (если я правильно понимаю)

#12
20:38, 25 дек. 2016

j-nox
Может придумаем и поженим их как-то по примеру того что 1vanK сделал? Можно шарповый компонент сделать для UI наверно который из ресурсов будет строчки грузить.

#13
21:01, 25 дек. 2016

libmono-urho.so вкомпилен весь фунгкционал, в том числе и локализация, а портированный код - это всего лишь набор dllimport'ов - может мне просто импортировать себе в проэкт недостающие классы/функции, или в сорц urho, но так я никогда не вернусь к своему проектику

#14
15:02, 10 янв. 2017

Мне на форуме https://forums.xamarin.com/discussion/comment/244594 написали, что скоро всё будет из коробки

Urho3DФорумURHOSHARP

Тема в архиве.