Здравствуйте
Помогите мне пожалуйста понять, как происходит локализация в 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" ?
Спасибо!
Мне кажется интуитивно что связки тут пока нет. Надо что то городить самому.
Ну мне пришло на ум что-то типа перегрузить LoadLayoutToElement и LoadLayout - добавить цикл, который рекурсивно пробежится по всем элементам типа текста и изменит значение на локализованное, но это опять костыль.
А я так хочу написать что-то хорошее, ну хоть разок.
В идеале наверно хотелось бы binding как в xaml?
Нет, в идеале хотелось бы поставить галочку "Auto Localizable" и всё :)
Но можно и как в xaml <attribute name="Text" value="{чет там в фигурных скобках}" />
j-nox
Вместо рекурсивного обхода можно XPath запрос сделать и в цикле пробежать.
Я автор этой подсистемы для локализации, но могу только объяснить как оно в обычном урхо работает, а что за AppResources.resx и откуда там чего берется в урхошарп я не знаю)
В папке 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
Класс! спасибо!
Через какое-то время я понял, что локалиизация не была портирована в 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
Базы данных тоже не портированы, nagg говорил типа нафига, в C# и так с базами данных порядок, может и для локализации там своя примочка какая-то
Есть свой механизм локализаций, я выше писал про AppResources.resx, но он никак не связан Urho (если я правильно понимаю)
j-nox
Может придумаем и поженим их как-то по примеру того что 1vanK сделал? Можно шарповый компонент сделать для UI наверно который из ресурсов будет строчки грузить.
libmono-urho.so вкомпилен весь фунгкционал, в том числе и локализация, а портированный код - это всего лишь набор dllimport'ов - может мне просто импортировать себе в проэкт недостающие классы/функции, или в сорц urho, но так я никогда не вернусь к своему проектику
Мне на форуме https://forums.xamarin.com/discussion/comment/244594 написали, что скоро всё будет из коробки
Тема в архиве.