AIMP4: Skin Engine – пользовательские локализации

В первых двух статьях, посвященных 4-ой версии скин-движка, я говорил о появлении “дружелюбного имени” у окон и текстовых кнопок. Наверняка, при прочтении у вас сразу же возникла мысль, что эти фишки лишь на половину полезны без локализации.

Прошлые статьи по теме:

  1. AIMP4: Skin Engine
  2. AIMP4: Skin Engine – элементы управления. Часть 1
  3. AIMP4: Skin Engine – элементы управления. Часть 2

Пользовательские локализации

Custom Localizations Editor

Редактор весьма прост и напоминает редактор локализаций для ПК версии программы.

Язык скина выбирается движком автоматически согласно тому, какой язык выбран в самой программе. Название локализации должно совпадать с именем файла основной локализации (за исключением регистра и расширения файла), что расположены в папке AIMP\Langs. Значение по умолчанию указывает, какой язык использовать в том случае, если в плеере выбрана локализация, которая отсутствует в скине.

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

Макрос, как вы могли заметить на скриншоте выше, имеет вид “@Lng:ID;”, где ID – номер строки из таблицы. Этот макрос необходимо задать в качестве текстового значения для свойства элемента и / или точки доступа. Рассмотрим пример.

Пример

Пример весьма прост, обратите внимание на значение в поле “Caption” и на текст, что отображается на кнопке:

Using lang-macro, russian language

А теперь переключаем язык редактора скинов на английский:

Using lang-macro, English language

Всё весьма просто.

Заключение

На текущий момент локализации поддерживаются на уровне подсказок (Hint) для всех без исключения элементов, а так же текстовыми кнопками и окнами. Здесь сразу стоить отметить, что непосредственное применение локализации происходит при выводе текста на экран, т.е. если вы оперируете текстовым значением на уровне оператора, то в качестве значения будет идти специальный макрос, а не локализированное значение.

9 thoughts on “AIMP4: Skin Engine – пользовательские локализации

  1. Tarik

    Наконец придет конец костылям по локализации =)

    У меня вопрос касательно ID: ID будет автоматически генерироваться в виде простого числа? Я думаю, числа будет немного неудобными для скинмейкеров, так как нужно бдует постоянно держать открытым окно редактора локализаций и смотреть, какая строка соответствует правильному ID.

    И еще вопрос – локализации будут частью ресурсов скина в скомпилированном виде? Конечный пользователь не сможет никак повлиять на локализации?

    1. Artem Post author

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

  2. Zhenya

    Всё интереснее и интереснее =)
    Сабж очень жду, потому что сейчас у меня в скине кнопки многократно дублируются из-за разных всплывающих подсказок (и прочего) – подсказки на двух языках, и плюс они меняются в зависимости от, например, состояния окна (Окно – показать, Окно – спрятать, Window – show, Window – hide).

    Вопросы:
    1. Будет ли возможность обратиться к какому-нибудь Binding-провайдеру чтобы узнать выбранный язык?
    Нужно для того, чтобы поменять текстуры с надписью на разных языках (или старые кнопки с подписями, но подписи находятся текстурах, из-за невозможности применить сложный эффект к подписям при наведении (нажатии) в новой “Текстовой кнопке”).

    2. Второй вопрос вытекает из первого. Будет ли возможность применять разные эффекты к подписи текстовой кнопки для разных состояний кнопки (обычное состояние, наведённое, нажатое, недоступное для нажатия)?

      1. Zhenya

        Ну, например, сильно размытая тень.

        А вообще, опишу подробней для чего конкретно мне пригодилась бы возможность обратиться к провайдеру и узнать выбранный язык.
        Есть окно настроек. Настроек много, расположены на нескольких вкладках. Через последнюю вкладку можно поменять язык с дефолтного английского на русский. Из-за того, что слова на русском языке в среднем длиннее, чем слова на английском языке, окно имеет разную ширину для разных языков (два контейнера в многостраничной группе, сейчас у меня разница между ними – 56 пикселей).
        Так вот, пользовательские локализации без возможности узнать выбранный язык, мне никак не помогут.

        Пока писал, появился ещё вопрос.
        В этом окне настроек, понятное дело, есть кнопки-переключатели, завязанные на счётчики (чекбоксы). Выглядят они почти стандартно – слева чекбокс, справа – подпись, только цветовая гамма и прочие мелкие нюансы изменены под скин. Нажать на чекбокс можно как по самому “квадратику”, так и по тексту подписи. У всех четырёх состояний кнопки (обычное, наведённое, нажатое, недоступное) разная яркость. При наведении (нажатии) и на “квадратик”, и на подпись должна меняться яркость всего элемента-чекбокса. То есть элемент должен быть цельный.
        Так вот, можно ли будет сделать такой чекбокс из текстовой кнопки? То есть смещённый текст подписи относительно “квадратика” чекбокса?

        P. S. Для лучшего понимания того, что я описываю, отправил в личку на форуме скриншоты окна настроек скина.

        1. Artem Post author

          1. Провайдер сделаю.
          2. Да, теперь полноценный чек-бокс сделать будет можно

          Что касается размера окна настроек – его можно подогнать под язык с самым длинным текстом

          1. Zhenya

            1. Спасибо.
            2. То есть будет настраиваемое смещение текста? Или выравнивание?

            3. Можно, но выглядит не очень, особенно для маленького окна. 56 пикселей пустого пространства от края окна до максимально длинной подписи на английском языке, а до остальных подписей ещё больше.
            У меня ширина окна одинаковая только между страницами на одном языке, чтобы при переключении вкладок ширина окна не прыгала. Вкладки ведь намного чаще переключаются, чем меняется язык.
            4. Если ширина новой текстовой кнопки как-то сможет автоматически меняться, в зависимости от ширины подписи, и при этом менять ширину родительского контейнера, то это окно настроек можно будет сделать из одной страницы и одного набора текстовых кнопок с заполненными пользовательскими локализациями. Но это конечно мутно как-то. Ведь у меня выравнивание по подписям не отдельное на каждой странице, а по максимально длинной подписи на всех страницах одного языка (чтобы ширина не прыгала при переключении вкладок).

            5. Что насчёт второго вопроса из первого моего сообщения? Грубо говоря, разный цвет подписи для разных состояний текстовой кнопки – будет ли такое?
            6. И ещё – будут ли многострочные текстовые метки?

            P. S. Вообще, конечно, динамическая ширина (в зависимости от текста) текстовым меткам и текстовым кнопкам не помешала бы. А если ещё и возможность завязать ширину контейнера на ширину текстовой метки/кнопки…

          2. Artem Post author

            2. Да, смещение текста задается с помощью нового свойства у текстуры – отступы от краев.
            3. Это просто как предложение, у меня используется такой подход во второстепенных окнах
            4. Нет, к сожалению, сейчас не сможет. Размер элемента не зависит от его содержимого
            5. Да, такое будет – для каждого состояния кнопки будет отдельный шрифт.
            6. Пока под вопросом (проблемы с производительностью)

  3. McClaud

    Сам не раз порывался выйти с предложением о локализации пользовательских хинтов, но останавливало отсутствие приличной концепции. Здесь же всё просто и понятно!

Leave a Reply