Локализация интерфейса в приложениях windows


Содержание

Локализация приложения

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

На некоторых платформах локализация осуществляется путем предоставления множества копий таких элементов пользовательского интерфейса, как таблицы строк и изображения. В WPF локализация не является столь же детальной. Здесь единицей локализации является XAML-файл (формально это скомпилированный BAML-pecypc, который встраивается в приложение). При желании поддерживать три различных языка, потребуется включить три BAML-pecypca. WPF будет выбирать из них подходящий на основании текущих настроек культуры на компьютере, на котором выполняется приложение. (Точнее — WPF будет использовать для принятия решения значение свойства CurrentUICulture в обслуживающем пользовательский интерфейс потоке.)

Разумеется, в таком процессе не было бы особого смысла, если бы нужно было создавать (и развертывать) универсальную сборку со всеми локализованными ресурсами. Это было бы не лучше создания отдельных версий приложения для каждого языка, поскольку приложение приходилось бы полностью компоновать заново при каждой необходимости добавить поддержку для новой культуры (или необходимости настроить текст в одном из существующих ресурсов). К счастью, в .NET эта проблема решается с помощью , которые работают с приложением, но хранятся в отдельных подпапках.

При создании локализованного WPF-приложения каждый локализованный BAML-pecypc помещается в отдельную подчиненную сборку. Для того чтобы приложение могло использовать эту сборку, она размещается в подпапке под основной папкой приложения вроде подпапки fr-FR, предназначенной для французского языка. После этого приложение может связываться с этой подчиненной сборкой автоматически путем использования технологии зондирования (probing), которая является частью .NET Framework, начиная с версии 1.0.

Самая большая трудность в локализации приложения заключается в рабочем процессе — другими словами в том, как извлечь XAML-файлы из проекта, сделать их локализованными, скомпилировать в подчиненные сборки и затем вернуть обратно в приложение. Это самая запутанная часть «истории» локализации в WPF, поскольку никаких средств (включая Visual Studio), обладающих поддержкой локализации на этапе проектирования, пока не существует. Вероятнее всего такие средства появятся в будущем, а пока WPF все равно позволяет выполнять все, что необходимо для локализации приложения, просто с применением чуть большего количества усилий.

Создание локализуемых пользовательских интерфейсов

Прежде чем начинать что-либо переводить, сначала нужно разобраться с тем, как приложение будет реагировать на изменение содержимого. Например, если удвоить длину всего текста в пользовательском интерфейсе, как изменится общая компоновка окна? В случае если была разработана действительно гибкая компоновка, никаких проблем возникнуть не должно. Интерфейс должен быть способен подстроиться в соответствии с динамическим содержимым. Ниже описаны некоторые рекомендуемые приемы, гарантирующие следование правильному пути.

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

Устанавливайте для свойства Window.SizeToContent значение Width, Height или WidthAndHeight, так чтобы размер окна мог увеличиваться по мере необходимости. (Опять-таки, это является обязательным не всегда; все зависит от структуры окна, но в некоторых случаях это очень полезно.)

Используйте для просмотра текста большого объема элемент ScrollViewer.

При желании локализовать приложение на язык, имеющий значительно отличающийся набор символов, понадобится использовать другой шрифт. Сделать это можно путем локализации в пользовательском интерфейсе свойства FontFamily или применения сложного шрифта вроде Global User Interface, Global Sans Serif или Global Serif, каждый из которых поддерживает все языки.

Может также потребоваться обдумать, каким образом компоновка будет работать при раскладке «справа налево» (вместо стандартной английской раскладки «слева направо»). Например, в арабском и иврите используется раскладка «справа налево». Этим поведением можно управлять посредством установки на каждой странице или в каждом окне приложения свойства FlowDirection. Более подробную информацию о раскладках «справа налево» можно найти в справке Visual Studio, в разделе Bidirectional Features (Средства двунаправленности).

Локализация — сложная тема. WPF предлагает работоспособное, но еще недостаточно зрелое решение. После того, как вы познакомитесь с основами, стоит заглянуть в документ Microsoft, посвященный локализации WPF, который доступен по адресу http://wpflocalization.codeplex.com вместе с кодом примеров. Можно ожидать, что в будущем поддержку локализации будет улучшена в инструментах проектирования, таких как Visual Studio и Expression Blend.

Подготовка приложения для локализации

Следующий шаг связан с включением поддержки локализации для проекта. Для этого потребуется внести только одно изменение, а именно — добавить в файл .csproj проекта где-нибудь в первом разделе

Это укажет компилятору, что языком (культурой) по умолчанию для приложения должен быть английский (США) (очевидно, что при необходимости можно выбрать другой язык). После внесения этой корректировки процесс компоновки изменится. При следующей компиляции приложения будет создана подпапка по имени en-US. Внутри этой папки будет находиться подчиненная сборка с таким же именем, как и у приложения, и расширением .resources.dll (например, LocalizableApplication.resources.dll).

В этой сборке будут содержаться все скомпилированные BAML-ресурсы для приложения, которые раньше хранились в основной сборке приложения.

Формально приложение локализуется не для какого-то конкретного языка, а для культуры, в которой учитываются региональные отличия. Культуры обозначаются с помощью двух разделенных дефисом идентификаторов. Первый указывает язык, а второй — страну. Следовательно, fr-CA означает французский язык, на котором разговаривают в Канаде, a fr-FR — французский, на котором общаются во Франции. Полный список имен культур и их идентификаторов можно найти в справке Visual Studio, в разделе, посвященном классу System.Globalization.Culturelnfo.

Это предполагает детальную локализацию, что может оказаться чрезмерным. К счастью, WPF позволяет локализовать приложение и на основе только языка. Например, при желании определить параметры так, чтобы они применялись для любого франкоговорящего региона, для культуры можно указать только идентификатор fr. Такой подход будет работать, если только не окажется доступной более специфическая культура, в точности соответствующая текущему компьютеру.

Теперь при запуске данного приложения среда CLR будет автоматически искать подчиненные сборки в соответствующем каталоге на основании региональных параметров компьютера, и загружать подходящий локализованный ресурс. Например, при запуске приложения на компьютере с культурой fr-FR среда CLR будет искать подпапку fr-FR и использовать подчиненные сборки, которые обнаружит там. Это означает, что для добавления в локализованное приложение поддержки дополнительных культур, потребуется просто добавить соответствующие дополнительные подпапки и подчиненные сборки, не беспокоясь об исходном исполняемом файле приложения.

Когда среда CLR начинает зондировать папки на предмет наличия подчиненной сборки, она следует нескольким простым правилам очередности:

Сначала она проверяет самый специфический из всех доступных каталог. Это означает, что CLR ищет подчиненную сборку, предназначенную для текущего языка и региона (вроде fr-FR).

Если CLR не удается обнаружить такой каталог, она начинает искать подчиненную сборку, предназначенную для текущего языка (такого как fr).

Если ей не удается найти и такой каталог, тогда генерируется исключение IOException.

Локализация программы

Всем Привет.
Помогите сделать локализацию программы.
Программу пишу на языке c#
Вся программа(кнопки и менюшки на англ. языке) теперь нужно сделать что бы при нажатии какой либо кнопки вся программа бала на русском. Как реализовать я не понимаю.

Ответы типа чего на русско не писал не нужны. Задача была поставлена написать программу на англ.языке и при помощи кнопки менять все на русский или другие языки.

05.06.2014, 12:46

Локализация enum
Такая проблем, есть файл resources.resx и enum, который выгладит примерно так public enum.

Локализация приложения на 3 языка
Ребята надо Ваша помощь! Есть проект, все работает прекрасно. Но надо ее зделать на 3-х языках.

Локализация формы по вызову
Приветствую, подскажите пример локализации интерфейса по кнопке менять с дефолтного на английский и.

Локализация. Как это?Оо
Ребята выручит, как делать ее?)) ваще не догоняю) препод задал. есть 8 форм, надо чтобы они и на.

Локализация даты TotalDays
Здравствуйте, давно пытаюсь решить этот вопрос, но все примеры, которые я находил были с ошибкой. .

C# WPF смена локализация приложения через кнопку

Доброго времени суток.

Прошу подсказать как можно реализовать смену локализации приложения через Button или через ComboBox.

В приложении сделал следующие действия. В файле Resources.resx прописал все названия кнопок, формы и т.п. После создал два еще два файла Resources.en.resx и Resources.ru-RU.resx, в файле Resources.ru-RU.resx прописал значения на русском.

В самом коде прописал следующее:


Если вначале стоит Thread.CurrentThread.CurrentUICulture = new CultureInfo(«ru-RU»); то язык меняется и все отлично, но если реализовывать через нажатие кнопки, то эффекта 0.

В чем моя ошибка или же я не верным путем пошел ?

1 ответ 1

Благодарю за комментарии и вашу помощь.

Решил проблему следующим образом:

  1. В проекте в Properties в файле Resources.resx прописал все названия кнопок, формы, и т.д
  2. После сделал две копии и переименовал их в следующие названия: Resources.en.resx и Resources.ru-RU.resx
  3. В файле Resources.ru-RU.resx в столбце Value заменил названия на русский язык.
  4. В проекте в разделе Properties — Settings.settings добавил настройку:
  5. После в самом в файле Xaml добавил xmlns:p = «clr-namespace:Localization.Properties» И для каждого значения лейбла, формы и т.д в параметре Content меняем на ранее созданные в Resources.resx имена. Пример:

После проделанных действий добавил следующий код

В нем реализовано следующее: В начале я устанавливаю дефолтный язык, в цикле идет определение того языка который сейчас используется программой и последующий вывод значения в ComboBox. И в итоге через кнопку после нажатия который происходит смена языка с последующем перезапуском приложения.

В конце компилируем код.

Старался описать более подробно. Всем больше спасибо.

Как изменить язык в Windows 10: включаем русский интерфейс

Изменение основного языка системы может быть необходимым, например, если на компьютере установлена англоязычная версия системы, а вам нужен русский интерфейс. Вы можете скачать и установить дополнительные языковые пакеты для Windows 10 и Windows 10 Enterprise 1903 / LTSC 2020, чтобы получить интерфейс операционной системы на требуемым языке.

Изменение языка системы в Windows 10: английский на русский

Прежде всего, войдите в учетную запись администратора устройства. Нажмите сочетание клавиша Windows + I для запуска приложения Settings (Параметры), а затем перейдите в раздел Time & Language (Время и язык).

В разделе Windows display language (Язык интерфейса Windows) нажмите ссылку Add a Windows display language in Microsoft Store (Добавьте язык интерфейса Windows в Microsoft Store).

Откроется страница Microsoft Store со всеми доступными для установки языковыми пакетами. Найдите и выберите язык, который нужно установить – например, русский (пакет локализованного интерфейса на русском).

На следующей странице нажмите Get (Получить).

Затем нажмите Install (Установить).

Дождитесь загрузки и установки выбранного языкового пакета. Выберите Yes, sign out now (Да, выйти сейчас), чтобы выйти из учетной записи для применений изменений или No, sign out later (Нет, выйти из системы позже).

Система будет доступна на выбранном языке после выхода из учетной записи или перезагрузки.

Локализация интерфейса в приложениях windows

Есть замечательная функция локализации языка интерфейса.

У меня задача другая локализация функционала для разных культур.

Или мысль только одна — разные сборки? И разные пакеты

Ответы

  • Помечено в качестве ответа developers_s 13 марта 2013 г. 3:30
  • Помечено в качестве ответа developers_s 13 марта 2013 г. 3:30

Да всё просто. Есть функционал, который французам за ненадобностью (у них своя культура, в смысле вековая культура), а американцам нуден. Зачем его демонстрировать французам?

Ну например программа которая кроме прочего может сказать годна яма на дороге для эксплуатации по Российскому ГОСТ или нет. Зачем локализовывать такую информацию для испанцев? А другая информация например правила проезда перекрестка если впереди «кирпич» висит. Это локализовывать (т.е. переводить на разные языки) надо. Правило то одно и то же.

Во первых как уже и сказали задача вероятно всего решается созданием отдельных сборок. Мало того те различия на которые вы замахнулись не реально затолкать в один проект. Уж слишком различны эти различия.

В вашем случае вам лишь будут полезны традиции программирования — создавай и накапливай. То есть вы можете выработать некий шаблон приложения — примерную навигацию, стили и т.д. Сделать как проект шаблон. Копировать его и уже потом наполнять данными подходящими для страны или региона.

Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

Mechanics of software


Programming is thinking, not typing

Локализация интерфейса и сообщений в приложениях .NET и Delphi

Не так давно в журнале уже затрагивалась тема локализации (см. «Мир ПК», №6/07, с. 68). В своей статье «Локализация приложений в Delphi для Win32» Михаил Перов рассказал о различных инструментах — коммерческих и бесплатных. Вернуться к сюжету мне пришлось по двум причинам: во-первых, хотелось бы описать непосредственно суть проблемы, вызвавшей появление ряда дополнительных инструментов, и, во-вторых, показать на примере, что разработчики вполне могут решить задачу своими силами.

В действительности технология локализации предлагается поставщиком как для среды разработки Microsoft Visual Studio.NET 2003/2005 (подгружаемые ресурсы), так и для CodeGear Delphi (Data Translation Wizard).

Основное неудобство штатных средств проявляется прежде всего при вовлечении в цикл локализации других исполнителей. В самом деле, вряд ли разработчики смогут самостоятельно сделать корректный перевод текста на несколько языков. Просить же далекого от программирования переводчика (а в заказных проектах зачастую ими являются ключевые пользователи) «набить текст», пользуясь средой Visual Studio или Delphi, не самая лучшая идея. Также всегда есть неприятные, хотя и преодолимые проблемы при локализации уже существующих приложений, где такая возможность не была предусмотрена изначально.

Илон Маск рекомендует:  DateTimeToFileDate - Функция Delphi

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

Локализация для .NET

Примечание: см. также более общий подход к локализации для .NET и Mono: gettext for .NET/Mono.

Ресурсы редактируются в удобной для переводчика табличной форме в среде MS Excel (рис. 1). Выбор Excel позволяет привлечь к переводу практически любого пользователя, однако при большом количестве задействованных людей, которым рассылаются файлы при децентрализованной работе, могут возникнуть другие проблемы: корректное слияние изменений, версии. Их можно решить, например, используя файл, размещенный на сервере SharePoint: в этом случае пользователь сам синхронизирует сделанные изменения через веб-сервис. При работе внутри сети предприятия возможно простое разделение доступа к файлу на сетевом диске или в системе управления исходным кодом (Visual SourceSafe, SVN и др.). То есть данная схема вполне может масштабироваться до небольших групп переводчиков, работающих в автономном режиме.

Рис. 1. Файл со строковыми ресурсами

  • 1 и 2 — таблица должна содержать как минимум две колонки: «Message» (идентификатор) и «Neutral» (значение по умолчанию). Идентификатор должен быть уникален для каждой строки.
  • 3 — таблица должна иметь название «Messages».
  • 4 — для локализации можно добавлять неограниченное число колонок с заголовком в виде «язык-страна», соответствующим значениям культур, поддерживаемых платформой.NET.
  • Пустые ячейки: будет использовано значение из колонки «Neutral», соответственно эта колонка должна быть заполнена всегда.

Далее, исходный Excel-файл обрабатывается утилитой, генерирующей ресурсные файлы для платформы .NET. Файлы включаются в проект разработчиком, компилируются как встроенные ресурсы (embedded resource) и затем с использованием небольшой вспомогательной библиотеки классов загружаются в приложение с минимальным написанием программного кода (рис.2).

Рис. 2. Схема локализации для .NET

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

Для генерации используется утилита ResourceMaker, конвертирующая файл Excel во множество файлов .NET с расширениями *.resx. Для обеспечения минимального уровня автоматизации утилита запускается из командной строки с параметрами:

Рекомендуется использовать имя файла ресурсов (BaseName) «Messages», чтобы в дальнейшем при использовании строковых ресурсов в приложении уменьшить количество необходимого для этого кода.

Утилита генерирует один или более файлов *.resx для каждого определенного вами языка в формате: . resx для значений по умолчанию (neutral), . ru-Ru. resx для русского, . fr-Fr. resx для французского и т. д.

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

Для удобной работы с ресурсами применяется небольшая библиотека Arbinada. Utils. Localizer. Вам необходимо скомпилировать эту сборку и добавить на нее ссылку в вашем проекте. Чтобы просто извлечь строку по ее идентификатору, используйте следующий код:

Чтобы избежать написания большого количества однообразного кода, для локализации визуальных элементов (текст — labels, опции — checkboxes и т. д.) в ваших веб-формах или пользовательских элементах управления (user controls) вы можете использовать класс WebFormLocalizer внутри события Page_Load:

Этот фрагмент программы меняет текст (caption) у элементов веб-формы по их идентификатору (WebControl. ID) на соответствующий, найденный в ресурсах. В прилагаемом к статье примере поддерживаются элементы типов: Label, CheckBox, LinkButton, Button и DataGrid.

Для DataGrid используется трехуровневая сигнатура для идентификатора ресурса:

Поддерживаются BoundColumn и TemplateColumn. Для ButtonColumn суффикс может принимать значения Edit, Cancel и Update. Более подробно вы можете посмотреть в исходном тексте файла WebFormLocalizer.cs.

Локализация для Delphi

Технология не имеет принципиальных отличий, она была успешно адаптирована для Delphi 2007 Win32 (рис. 3).

Рис. 3. Схема локализации для Delphi

Как видно из приведенной схемы, непосредственной компиляции в ресурсы Windows-приложения не происходит. Вместо этого мы используем XML-файлы, содержащие метаинформацию об используемых языках и собственно переведенные строки (рис.4, 5).

Рис. 4. Метаинформация об используемых языках локализации

Рис. 5. Строковые ресурсы

Вместо написания нескольких строк текста выбираем в палитре компонент TA3FormLocalizer и в качестве источника назначаем ему LocalizerStore (рис.6).

Рис. 6. Локализация формы в Delphi. Просто «кидаем компонент».

В самом приложении необходимо только проинициализировать хранилище локализованных данных.

После запуска приложение показывает информацию на выбранном языке (в примере используются текущие настройки локализации Windows для пользователя).

Рис. 7. Локализованное Delphi-приложение

Взяв исходные тексты (файл A3Localization. pas), вы сможете изучить имеющиеся возможности по локализации широкого круга VCL-компонентов (стандартные элементы управления форм, сетки, компоненты доступа к БД TDataSet с локализацией на уровне названий полей, TActionList и другие). При необходимости в подсистему легко добавить недостающую функциональность, например по локализации ваших собственных компонентов, на основе механизма информации о типах времени выполнения (RTTI — runtime type information), не меняя статической связанности модулей.

Исходные тексты

Zip-архивы, содержащие примеры локализации для веб-приложения .NET и Delphi-приложения под Windows, вы можете скачать по ссылке в конце страницы или на прилагаемом к журналу диске.


Сергей Тарасов, октябрь 2005. Декабрь 2007 (с добавлениями).

Что разработчику нужно знать о локализации приложения

Как показали исследования AppAnnie, Россия замыкает пятёрку стран-лидеров по количеству скачиваний мобильных приложений в AppStore и Google Play Market в первом квартале 2020 года, но по выручке с продаж не вошла и в первую 10-ку. Значит ли это, что разработчикам стоит ориентироваться исключительно на Западный рынок для увеличения своей прибыли и если да, то на какой язык, кроме английского, переводить, а точнее – локализовать приложение?

Чем отличается локализация от перевода

Перевод – это интерпретация текста или речи с одного языка на другой. Она нацелена на передачу смысла информации без учёта национальных особенностей, культурных ценностей и в случае с разработкой мобильных приложений – привычного user experience жителей конкретной страны и особенностей целевой аудитории.

Локализация включает в себя целый комплекс технических задач по адаптации кода, компонентов и добавления ресурсов. Она решает проблему различия в культуре, языке и восприятии материала разными национальностями. По сути, локализовать приложение – значит перевести его так, чтобы у пользователя не возникло никаких сложностей с пониманием и использованием продукта, с назначением его функций.

То есть, перевести – значит – интерпретировать, а локализовать – адаптировать.

Интернет пестрит “смешнявками” с некачественным переводом как приложений, так и веб-контента, но дословный перевод и отсутствие локализации далеко не одно и то же. Здесь часто наблюдается подмена понятий.

Локализация – это не просто качественный перевод, это смысловая адаптация текста, который буквально вгрызается в нейронные сети и кишки пользователя с полуслова. Скажем, если жителям СНГ в e-commerce сайтах и приложениях привычнее видеть кнопку “Купить”, то не нужно выдумывать велосипед и лепить кнопку “Приобрести товар”. Казалось бы, человек и так поймет, о чем идёт речь, но зачем усложнять ему жизнь? А точнее – себе.

Что даёт локализация

Жители Бразилии, России, Китая и Индии составляют 40% населения всего мира. Проигнорировав необходимость перевода на хинди, мандарин или португальский язык, есть шанс быть выкинутым за борт компаниями, которые внедряют эти языки в свои продукты. Мониторинг спроса на локализацию приложений на тот или иной язык позволит компаниям-разработчикам расширить свою клиентскую базу.

Какие языки правят Интернетом

Топ 10 самых востребованных языков в Интернете

  1. Английский
  2. Китайский (упрощенный)
  3. Испанский
  4. Немецкий
  5. Японский
  6. Французский
  7. Арабский
  8. Португальский (бразильский)
  9. Русский
  10. Корейский

Итальянский занял только 11-е место в рейтинге, а польский, занявший 17-е место, набирает всё больше популярности и часто встречается в востребованных языковых парах.

Последнее исследование агентства CommonSenseAdvisory в марте 2020 года показало, что стоимость перевода самых распространенных языковых пар не имеет четкой линейной зависимости. Это связано с тем, что цены на перевод могут снижаться в то время, как спрос растёт из-за высокой конкуренции на рынке языковых услуг.

Чем вызвано такое формирование рейтинга

Рейтинг востребованности языков зависит не только от количества носителей, но и от влияния экономики страны на мировой рынок.

Английский – язык международного общения и во многих странах он является официальным государственным языком. Мандарин (китайский язык) является языком международного бизнеса и это совсем неудивительно. Это наиболее используемый язык во всём мире, а китайская экономика занимает 2-е место по номинальному значению ВВП в стране. Экономика Бразилии занимает 9-е место в мире и её рост продолжится ещё как минимум 5 лет, согласно данным InternationalMonetaryFund. На французском языке в мире разговаривают около 274 млн человек, в 29-ти странах он является государственным. Япония – 3-я в рейтинге стран по ВВП в мире. Она является мировым лидером в автомобилестроении и высоких технологиях, что делает знание японского языка востребованным на рынке языковых услуг. Около 240 млн человек разговаривает на арабском языке и в 23 странах он является официальным. ОАЭ являются мировым лидером на нефтяном рынке.

Что делать с этими данными заказчикам и поставщикам услуг перевода

  • Заказчикам переводческих услуг необходимо убедиться, что их мультиязычные приложения переведены на все наиболее востребованные языки, а также убедиться, что стоимость перевода, за который они платят, соответствует рыночной.
  • Поставщикам языковых услуг следует мониторить рыночный спрос на языковые пары, чтобы правильно распределять ресурсы, а также сравнить востребованные языковые пары со своими возможностями и расставить приоритеты в сторону наиболее рентабельных.

Обзор рынка мобильных приложений

Первый квартал 2020 года стал знаменательным для мирового рынка мобильных iOS-приложений. Китай впервые перегнал Японию по объёму выручки с продаж и занял 2-е место в рейтинге стран по уровню дохода от мобильных приложений – за последние 4 месяца доход Китая вырос более чем в 2 раза. Такой рост был обеспечен в основном за счёт мобильных игр.

Вытеснив Японию со второй позиции по доходам от приложений на обеих платформах, Китай вплотную приблизился к лидеру в рейтинге по мобильным играм в AppStore – США. По прогнозам AppAnnie, уже в этом году Китай станет безоговорочным лидером по выручке от продаж игр на платформе от Apple.


На какой язык локализовать приложение

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

Стоит добавить, что магазина мобильных приложений GooglePlay в Китае всё ещё нет. Китайские разработчики ориентируются на локальные сторы для Android-продуктов, поэтому и доходы от продажи приложений на платформе от Google достаточно низкие.

Топ 5 языков для локализации iOS-приложений

  1. Английский
  2. Китайский
  3. Японский
  4. Немецкий
  5. Французский

Топ 5 языков для локализации Android-приложений

  1. Английский
  2. Японский
  3. Немецкий
  4. Французский
  5. Испанский

Какими навыками должен обладать специалист по локализации приложений

Локализация игр и приложений действительно является по своей сути переводом, но требует владения специальных программистских и технических навыков. Поэтому локализация – самая трудоёмкая отрасль лингвистических услуг. Языковой специалист должен не только великолепно знать язык, но и обладать базовыми знаниями разработчика для локализации отдельных элементов меню и интерфейса. Кроме того, специалист по локализации должен хорошо разбираться в тематике приложения и иметь хотя бы минимальный опыт работы с такими приложениями и ресурсами. Локализация игр ещё сложнее. Тут от переводчика требуется самим быть немного геймером и иметь хорошую фантазию. В мобильных играх переводчик не просто интерпретирует текст на другой язык, а буквально создаёт отдельную версию игры на другом языке.

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

Локализация приложений даёт возможность выйти на рынки других стран, тем самым существенно увеличить количество загрузок и соответственно – прибыль. Исследования в компании мобильного маркетинга Applead показывают, что локализация страницы приложения в Google Play и AppStore повышает конвертацию в установку на 25-30%, что несомненно сыграет в плюс для продвижения мобильных приложений и увеличению вовлечённости пользователей. Разнообразие вариантов монетизации мобильного приложения позволяет подобрать наиболее подходящую модель, а локализация – сделать из этой модели генератор масштабируемой прибыли. Глупо упускать источники возможного дохода на подъёме рынка разных стран, несмотря на то, что локализация является трудоёмким и кропотливым процессом. Рост мирового рынка мобильной рекламы, увеличение количества пользователей смартфонов и повышение интереса владельцев “умных” мобильных устройств к приложениям ясно даёт понять, что локализация – это необходимый инструмент для расширений клиентской базы в мире.

23 решения для локализации и интернационализации приложений.

Этот пост — попытка систематизировать всю имеющуюся на данный момент у меня информацию, касающуюся локализации приложений.

Пока мы пишем программы «для себя», то о локализации, интернационализации и пр. заморочках мы как-то и не задумываемся. А зачем? Врядли кому-то в здравом уме придет в голову мысль «А не перевести ли мне свою утилиту на иврит, чтобы потом с такой программой работать?» Совсем другое дело, когда программа «вырастает из коротких штанишек» и на неё появляется спрос в других странах. Тогда, если спрос достаточно большой, можно (и нужно) взяться за локализацию — найти подходящий инструмент, нанять переводчиков (или переводить самому) и работать, работать, работать. Решение типа «Сделаю INI-файлик» вполне может подойти для небольших программок, но никак не для серьезных проектов с развитым интерфейсом, большим количеством форм, русурсов и т.д. — в этом случае стоит подыскать подходящее готовое решение. Собственно, основные цели поиска решения для локализации, которые были мне поставлены — это найти решение, которое позволит:

  1. проводить локализацию руками не-программистов
  2. работать с собственными словарями для перевода
  3. поддержка XE2

ну и, как обычно, решение должно быть удобным в использовании, дешевым, по возможности, простым в освоении и т.д. и т.п. А так как я все равно решил пройтись в своем поиске по всем возможным вариантам (а точнее по максимально возможному количеству вариантов), то решил весь найденный материал систематизировать и оформить вот этим самым постом. Здесь Вы сможете узнать и о существующих компонентах Delphi и о библиотеках и о программах — в общем о всем, чего только душа пожелает. В общем, если Вы тоже задались целью отыскать во всем множестве предложений для локализации то, которое придется по душе именно Вам, то читайте далее :)

Содержание

TSILang components suite

  • Разработчик: SiComponents
  • Официальный сайт: www.tsilang.ru
  • Цена: от $259 до $399. Пакет за $259 не содержит исходников (только DCU и OBJ)
  • Наличие ознакомительной версии: имеется.
  • Дата последнего релиза: 05 мая 2012
  • Поддержка Delphi XE2: имеется
Илон Маск рекомендует:  Что такое код farrealloc

Что говорят о своем продукте разработчики:

TsiLang ® Components Suite позволяет добавлять поддержку для неограниченного количества языков, а также, создавать полностью локализованные версии продуктов, основанные на базовой версии проекта. Автоматически находятся и заносятся в список для перевода все необходимые элементы интерфейса пользователя, предоставляются удобные способы сохранения и управления переводами, и конечно, переключение языка интерфейса осуществляется «налету» как во время работы приложения, так и в режиме дизайнера, что позволяет тестировать интерфейс даже без компиляции и запуска приложения.

Мой тест.

Для тестирования TsiLang я скачал и установил последнюю версию компонентов (6.5.4.7) и создал простенькое приложение на котором разместил Button, Label, OpenDialog, добавил ресурсные строки и константы. Специально на OnClick кнопки был создан такой «кривой» обработчик:

Локализация с TsiLang проводится следующим образом:

1. Запускаем TsiLang expert из меню Delphi: Tools ->TsiExpert


Здесь отображаются все формы проекта, а также компоненты TsiLang, расположенные на этих формах. Теперь выбираем в меню File->Languages и редактируем список языков для нашего приложения. По умолчанию все языки имею названия типа Language1, Language2 и т.д. я переименовал их так:

После того как была нажата кнопка «Ok» на главной (и единственной) форме приложения появился компонент TsiLang:

Теперь находим в эксперте кнопку «Save Project» и сохраняем наш проект. В TsiLang используется два типа файлов проекта:

  1. *.sib — бинарные файл с переводами. Этот тип файла разработчики рекомендуют использовать, т.к. загрузка таких файлов происходит значительно быстрее, чем при использовании второго типа файлов
  2. *.sil — текстовые файлы. Преимуществом этого типа файлов является то, что мы можем передать этот файл с утилитой «SIL Editor» другому человеку для перевода.

Теперь, находясь в эксперте дважды щелкаем мышкой по названию формы в списке — откроется окно редактора перевода:

В левой части окна (в дереве) редактора содержатся группы переводимых свойств компонентов и строк и, соответственно, справа — таблица для перевода. TsiLang может локализовать не только свойства компонентов типа Caption, Hint, Text и т.д., но также и строки из диалогов, например, на рисунке ниже представлены все строки для перевода из различных диалоговых окон, которые могут использоваться в приложении:

Начинаем переводить все строки с русского на английский. При переводе каждой строки редактор в отдельном окне показывает нам длину строки оригинала (в пикселях) и длину переведенной строки:

В принципе, назначение этого информационного окошка понятно — можно контролировать ситуации, когда переводимый текст не будет вписываться в границы компонента. Хотя, как по мне, так было бы удобно добавить в это окошко ещё и ширину самого компонента — что б было с чем сравнивать ширины строк.

После того, как все строки переведены снова сохраняем наш проект. Теперь sil-файл должен содержать примерно такой текст:

!@#$ — это разделитель, который мы сами можем определить при сохранении файла. В процессе перевода строк в редакторе можно заметить, что TsiLang ни коим образом не учёл, что в pas-файле формы есть и секция resourcestring и const и даже строка текста в обработчике OnClick. Чтобы добавить эти строки к переводу необходимо выбрать в меню эксперта TsiLang:

  • File -> Source -> WithForm— чтобы выбрать строки из секции implementation модуля,
  • File -> Source -> WithForm —чтобы выбрать все строковые константы и ресурсные строки

В итоге откроется окно с результатами поиска в котором Вы можете добавить строку в список исключений или заменить её на вызов функции TsiLang:

Жмем в этом окне кнопку «Modify Source» и получаем такое сообщение:

Открываем pas-файл и видим следующую странную картину:

Мне показалось странным то, что TsiLang прекрасно определяет строковые константы в pas-файле и даже изменяет самостоятельно исходник, но почему-то «ленится» сам определить var — ну сделали бы доп.опцию в настройках проекта перевода типа «Определять VAR для констант со строками» и «Изменять настройки компилятора». Но это ладно — окно с сообщением есть и то хлеб. Вот, что мне действительно не понятно, так это откуда TsiLang нашел в моем проекта непонятные иероглифы? Думал, что это может быть по причине того, что pas-файл сохранен в ANSI, но нет — сменил на UTF8, а проблема с иероглифами осталась…В общем странно это.

После того как строки были помещены в перевод можно снова открыть редактор перевода и провести перевод группы Strings (благо в редактор строки попадают без искажений):

После того, как все строки переведены, а sil-файл сохранен, можно организовать переключение языков в своей программе. В TsiLang каждый язык имеет свой идентификатор типа integer. Например, в моем случае идентификаторы были такими:

Теперь, чтобы интерфейс моей программки переключился на английский язык достаточно где-нибудь вставить вот такой код:

Это приведет к тому, что TsiLang подгрузит из sil-файла строки на необходимом языке.
Что касается работы со словарем переводов, то TsiLang может передавать в словарь (предварительно созданные) только уже переведенные строки. Для этого можно воспользоваться все тем же редактором переводов — жмем в редакторе кнопку «Add All», которая предназначена для передачи в словарь всех переводов и получаем вот такое окошко для выбора необходимых опций передачи:

выбираем здесь файл словаря, жмем «Ok» и получаем все переведенные строки в свой словарик, который, кстати, выглядит вот так:

Впоследствии этот словарь можно будет использовать для автоматических переводов строк в своих программах. Ну и, как я уже говорил выше, для работы с SIL-файлами имеется отдельная утилита под названием SIL Editor, которая предназначена для переводчиков. Для чистоты эксперимента я скопировал папку с SIL Editor на флэшку и запустил программу с виртуалки «Windows XP Mode»:

SIL Editor позволяет производить переводу по словарям и вручную, а также, если необходимо, добавлять новые языки в перевод.

Другие возможности TsiLang:

  1. Импорт словарей из doc-, html-, xls-, csv-, po-файлов
  2. Импорт ресурсных строк из исполняемых файлов
  3. Наличие собственных компонентов — диалоги открытия файлов, метки, списки и т.д.
  4. Ведение статистики по переводам

Довольно большой получился обзор, но инструмент того стоит. Подведем небольшой итог:

Достоинства:

  1. Просто подключается к проекту — бросили компонент на форму, вызвали 1 метод и интерфейс переведен
  2. Удобный редактор перевода — все строки разложены, что называется «по полочкам», можно быстро ориентироваться по дереву в поиске нужных строк для перевода
  3. Поддерживает как бинарные так и текстовые файлы с переводами. Создали sil-файл, отдали переводчику, потом пересохранили в sib и все готово — и программа быстрее будет работать и никто больше в перевод не залезет.
  4. Наличие инструментов для переводчиков (SIL Editor, словари)

Недостатки:

  1. «Корежит» русские строки в pas-файле. Пусть они и заключаются в комментарии, но, тем не менее, факт на лицо.
  2. В процессе работы обнаружились непонятные ошибки при работе со словарями. Например, при переносе переведенных строк в словарь через раз появлялась ошибка выхода за границы диапазона.
  3. Небольшие проблемы с окнами TsiLang. Они, конечно, жить не мешают, но тем не менее, не хорошо, когда ты вызываешь словарь, а он какого-то лешего сворачивается в панели управления.

В принципе, указанные выше недостатки (за исключением второго) не такие уж и критичные.

DKLang Localization Package

  • Разработчик: DKSoftware
  • Официальный сайт: www.dk-soft.org
  • Цена: бесплатно
  • Дата последнего релиза: 25.12.2008
  • Поддержка Delphi XE2: нет


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

Во-первых, настораживает дата последнего релиза — 2008 год — не факт, что компоненты заработают в XE2 без проблем.

Во-вторых пакет требует дополнительной установки компонентов Tnt Unicode Controls 2.3.0, которые в 2012 году уже как бы и лишние — юникод и так поддерживается.

Поэтому, если у Вас есть, что сказать по этому решению — хорошего или плохого — отпишите в комментах, а я добавлю отзывы в обзор.

UPDATE : Отзыв про DKLang Localization Package. Кратко и понятно.

UPDATE 2 : работоспособность DKLang в XE2

EMS Advanced Localizer

  • Разработчик: EMS
  • Официальный сайт: www.sqlmanager.net
  • Цена: 2 900,00 руб.
  • Наличие ознакомительной версии: имеется
  • Дата последнего релиза: 13 января 2012
  • Поддержка Delphi XE2: имеется

Что говорят о своем продукте разработчики:

Advanced Localizer™ — это незаменимый пакет компонентов для Borland® Delphi®, позволяющий добавлять языковую поддержку Вашим Delphi® приложениям. Широкие возможности пакета Advanced Localizer позволяют быстро и просто локализовать свойства компонентов каждой формы, создавать языковые файлы с текущими значениями свойств компонентов, управлять файлами локализаций, а также назначать компоненты и их свойства, подлежащие локализации. Язык приложений, использующих Advanced Localizer, может быть переключен на другой непосредственно во время работы без последующего перезапуска приложения. Advanced Localizer также предусматривает возможность написания приложений-потомков, использующих языковые файлы, заданные пользователем.

Так как «незаменимых» у нас нет, то я провел свой небольшой тест этих компонентов все на том же маленьком приложении в 1 форму.
Мой тест
Скачал и установил пакет компонентов в Delphi XE2, открыл проект. В палитре компонентов Delphi появилась новая вкладка — EMS Advanced Localizer. С этой вкладки бросам на форму компоненты:

У TQFormLocalizer в свойстве Source указываем TQLanguageSource и приступаем к работе.

Первым делом создаем файлы для локализованных строк — делаем два пустых файлика с расширениями *.lng (расширение по умолчанию для EMS Localizer) и называем их просто — rus и eng.

Теперь дважды щелкаем мышкой по компоненту TQLanguageSource для вызова менеджера языковых файлов:

Жмем единственную активную кнопку и добавляем файлы:

Теперь, по идее разработчиков, в списке менеджера должна появиться новая запись…однако её нет. Вот значения, которые содержатся в свойстве Languages компонента:

Однако список визуального редактора девственно чист. Ну да Бог с ним со списком — пробуем перевести наше приложение. Дважды щелкаем по второму компоненту (TQFormLocalizer) для вызова редактора перевода:

В редакторе мы можем помимо перевода строк также добавить новый языковой файл, отредактировать имеющийся язык или выбрать язык, используемый по умолчанию. Как можно видеть на рисунке — в редактор попадают только строки, содержащиеся в свойствах компонентов, а ресурсные строки и константы остаются незамеченными, что можно записать в недостатки этих компонентов.

После перевода всех строк можно добавить в программу опцию для переключения языка интерфейса. Делается это примерно также как и в TsiLang — указанием индекса активного языка:

При этом, если используется язык по-умолчанию (отмечен как «Original»), то у него индекс равен -1, а у остальных — начинается с нуля и наращивается по порядку в списке Languages.

Другие возможности EMS Advanced Localizer:

  1. Загрузка переводов из базы данных
  1. Компоненты просты в использовании — на то, чтобы разобраться что и как работает ушло от силы минут 5.
  2. Достаточно дешевые
  3. Есть возможность хранить переводы в БД
  1. Нет поддержки словарей и, соответственно, авто-переводов
  2. Проблемы в простеньком менеджере языков
  3. Не поддерживается перевод констант и ресурсных строк
  4. Нет инструментов для сторонних переводчиков

В целом мое мнение по поводу EMS Advanced Localizer — достаточно удобные компоненты для работы с небольшими проектами, но для более менее крупных проектов где требуется поддержка многих языков, работа нескольких человек над переводом и т.д. этот набор компонентов, к сожалению, слабоват.

Korzh Localizer

  • Разработчик: KORZH developers tools
  • Официальный сайт: devtools.korzh.com
  • Цена: от 149.0 EUR до 649.0 EUR
  • Наличие ознакомительной версии: имеется
  • Дата последнего релиза: 23 июля 2012
  • Поддержка Delphi XE2: имеется .

Что говорят о своем продукте разработчики:

Один EXE-файл может поддерживать несколько языков. Дополнительные языки могут быть добавлены без перекомпиляции. Нет необходимости создавать множество exe-файлов
Строковые данные могут храниться как в стандартных ресурсных DLL, так и в специальных языковых файлах
При локализации код программы либо изменяется очень мало (буквально пару строк), либо не изменяется вообще. Localizer не меняет проект приложения, т.к. не используются какие-либо дополнительные компоненты
Локализованный проект можно запускать на компиляцию без установленного Localizer
Localizer переводит как ресурсы из VCL, так и любые другие ресурсы
Поддерживается хранение переводов в стандартном Хранилище переводов (Translation Repository) и их повторное использование в будущем
Поддерживает все сторонние компоненты и пакеты (например, DevExpress, TurboPower, ElPack, RX и т.д.)
Процесс перевода можно осуществлять с помощью встроенной утилиты Language Manager, свободно доступной для закачки переводчиками
Простой переход из Borland ITE (Integrated Translation Environment — интегрированная среда перевода)

Мой тест

Скачал триал, отличие которого от полной версии заключается в том, что Localizer переводит только первые 30 строк из каждой формы/файла. Установил После чего в главном меню Delphi XE2 появился новый пункт:

Выбрал в меню «Start project localization» в итоге меня попросили выбрать основной язык для проекта и указать папку для хранения языкового файла:

После нажатия «Localize mu project!» была запущена перекомпиляция проекта, а в dpr-файле проекта добавились необходимые модули и вызов методов Korzh Localizer’а:


Также, сразу же после информационного сообщения о том, что мой проект локализован запустился Language Manager:

В диалоге выбора нового языка для локализации есть замечательная опция — «Try to automatically translate via Google». Однако опция эта в настоящий момент не работает:

Связано это не стем, что разработчики там чего-то не так сделали. Причина кроется в том, что Google перевел API Translate на коммерческие рельсы и, если не ошибаюсь, сделали доступ только по OAuth 2.0. Так, что, видимо в следующих редакциях Korzh Localizer’а эта опция пропадет либо будет использоваться для более доступных API, например, для Bing Translator API.

После добавления языка для локализации в Language Managere появляется таблица для перевода найденных в проекте строк. Помимо того, что непосредственно находится в проекте, Korzh Localizer также позволяет локализовать и строки, содержащиеся в других модулях Delphi:

После перевода Localizer может показать вам статистику — сколько строк переведено, процент перевода и т.д., однако и тут обнаружилась ошибка при переключении на вкладку «External Items»:

Мелочь, конечно, но не приятная. Далее мне необходимо было проверить то, как Korzh Localizer умеет вытаскивать из исходников жестко закодированные строки. Для этого в главном меню была выбрана опция:

Помощник (назовем его так) предлагает выбрать модули для сканирования на наличие строк, а также, предлагает два варианта хранения строк — в ресурсном файле или в pas-файле:

Я оставил все настройки по умолчанию. В модуле было три строки — одна в секции resourcestring, вторая — в const и третья — в обработчике OnClick кнопки. В итоге Korzh Localizer определил следующее:

После нажатия «Next» IDE выдала сообщение:

После нажатия «Yes» в uses был добавлен новый модуль, содержащий секцию resourcestring в которой находилась одна найденная строка. Также изменился и обработчик OnClick кнопки, который стал выглядеть так:

В Language Manager’е строка не появилась — может предполагается, что такие строки переведутся и без менеджера, а может они как-то хитро добавляются в менеджер — с этим я не разбирался детально. Мне осталось только проверить как происходит локализация. Для того, чтобы проект «заговорил» на другом языке достаточно было выбрать в главном меню необходимый язык:

Илон Маск рекомендует:  Что такое код asp authpersistsinglerequestalwaysifproxy

После чего IDE снова сообщила, что файл был изменен и попросила его перезагрузить. Перезагрузил, собрал проект и получил приложение на английском языке:

Другие возможности Korzh Localizer:

  1. Создание/импорт/экспорт репозиториев. Импорт и экспорт осуществляется в XML или TMX-форматах.
  2. Поддерживает несколько языков для локализации — на каждый язык создается отдельный файл
  3. Умеет работать с EXE- и DLL-файлами.
  1. Не требует наличия на форме каких-либо компонентов — все, что необходимо Korzh Localizer сам подключает в dpr.
  2. Есть инструмент для переводчиков
  3. Есть возможность создавать/импортировать/экспортировать репозитории
  1. Пока работал с инструментов обнаружил разного рода недочёты типа ошибок (см. скрины выше), недочёты в интерфейсе, наличие неработающих опций (в то время как Google уже давным давно закрыл доступ к API, а релиз локализера был относительно недавно). Все это создает ощущение, какой-то заброшенности проекта.
  2. Ресурсные строки не попадают в Language Manager или как-то так хитро, что сразу и не сообразишь куда надо нажать или что куда добавить.

В целом я бы пока оставил Korzh Localizer как запасной вариант на случай, если не найдется ничего более подходящего. Помимо описанных выше недостатков, одной из причин такого вывода послужило время, которое потребовалось, чтобы освоиться в работе с инструментом — из всех выше рассмотренных инструментов Korzh Localizer отнял больше всего времени.

GNU gettext for Delphi and C++ Builder toolkit

  • Разработчик: dxgettext.po.dk
  • Официальный сайт: dxgettext.po.dk
  • Цена: бесплатно
  • Дата последнего релиза: неизвестно
  • Поддержка Delphi XE2: нет

Несмотря на то, что поддержки Delphi XE2 нет, я все-таки решил скачать и попробовать в работе эту библиотеку. К сожалению после подключения dxgettext.pas к проекту посыпались ошибки — где-то вместо ansiString указали string, использовали методы, помеченные как depricated, использовали неверные параметры методов (может в Delphi 2009 такой код компилировался, но в XE2 — нет). В общем много чего повылазило… А жаль. В Lazarus я использовал эту библиотеку пару раз и, надо сказать, она мне понравилась. Конечно, для уже существующих проектов внедрять в работу DXGetText будет довольно проблемно, но для новых — вполне сносная и удобная библиотека. Есть несколько утилит для переводчиков, память переводов и т.д. В общем, если задумаете начинать проект на Delphi версии до 2009 и потребуется бибилотека для локализации и интернационализации проекта — попробуйте DXGetText.

i18n Package

  • Разработчик: Kambiz R. Khojasteh
  • Официальный сайт: www.delphiarea.com
  • Цена: бесплатно
  • Дата последнего релиза: 19 августа 2012
  • Поддержка Delphi XE2: нет (согласно информации на оф.сайте)

i18n Package v1.10 for Delphi представляет из себя целую библиотеку компонентов, предназначенных для локализации и интернационализации проектов. Несмотря на то, что официально поддержка Delphi XE2 не заявлена эта библиотека без проблем установилась в Delphi XE2, поэтому я решил немного её протестировать.


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

Итак, работа по локализации с помощью i18n Package происходит следующим образом:

  1. Бросаем на главную форму компонент TLocalizer
  2. На все остальные формы (включая и главную) бросаем компонент для перевода — TTranslator
  3. Для локализации диалогов также необходимо уложить на главную форму форму компонент TMessageBox и указать в нем необходимые заголовки, иконки и т.д.

Теперь надо создать файл с переводами строк. Для этого дважды кликаем мышкой по компоненту TTranslator — откроется редактор в котором необходимо выбрать свойства и строки, которые мы будем переводить:

После того, как необходимые элементы выбраны преходим на вкладку Export, указываем язык на котором наши строки написаны (т.е. Русский) и экспортируем строки в файл *.i18n:

Файл создан — можно приступать к переводам. В папке Bin библиотеки находится специальная утилита под названием i18n Editor, которая и предназначена для переводов.

Программка довольно простая в использовании и, думаю, Вы с ней очень быстро освоитесь. Скажу только, что i18n Editor способен «обучаться» — для этого программе необходимо указать папку в которой лежат уже готовые файлы *.i18n и программа автоматически их просканирует и вытащит из них новые для себя фразы.

После того, как все необходимые строки переведены возвращаемся в Delphi и указываем в свойстве URI компонента TLocalizer наш файл с локализациями. Теперь добавляем на форму компонент TCultureBox и в его свойстве Localizaer указываем Localiwer1 (если компонент не переименовывался).

Теперь можно запустить программку и убедиться, что перевод интерфейса происходит успешно:

  1. Очень простая в использовании библиотека
  2. Для своей цены — $0.0 достаточно качественная (в Delphi XE2 работает отлично)
  1. Парсер не обнаруживает resourcestring и строковые константы, а обнаруженные и переведенные строки из кода программы все равно не локализуются.
  2. Для каждой формы/модуля необходимо использовать свой TTranslator, что не совсем удобно. Логичнее было бы сделать небольшой сканер всего проекта на наличие строк как это сделано, например, у DXGetText

Общий вывод по библиотеке можно сделать следующий — для соотношения «цена/качество» замечательная библиотека, позволяющая практически без проблем сделать мультиязыковую поддержку в небольших проектах. Немного портит впечатление работа бибилотеки со строками не из свойств компонентов, думаю, что если проект живет (а судя по релизу — проект вполне себе живой), то эта досадная проблема решится.

Kryvich’s Delphi Localizer

  • Разработчик: Kryvich
  • Официальный сайт: sites.google.com/site/kryvich/localizer
  • Цена: бесплатно
  • Дата последнего релиза: 7 января 2012
  • Поддержка Delphi XE2: имеется

Первые две строки можно записать в dpr-файле и там же подключить модуль локализатора. Все. Можно запустить программу и проверить работу.

  1. Очень простая в использовании библиотека
  2. Компактная
  1. Нет словарей
  2. Сканер не определяет жестко закодированные строки и константы

В целом библиотека вполне подойдет для проектов с небольшим количеством строк для локализации. Всё-таки работа через ini-файл даст о себе знать при большом объеме данных.

JVCL (JEDI Visual Component Library)

  • Разработчик: JEDI Project
  • Официальный сайт: jvcl.delphi-jedi.org
  • Цена: бесплатно
  • Дата последнего релиза: 11 апреля 2011
  • Поддержка Delphi XE2: имеется

CnPack Component Package (CnVCL)

  • Разработчик: CnPack
  • Официальный сайт: www.cnpack.org
  • Цена: бесплатно
  • Дата последнего релиза: 5 ноябра 2011
  • Поддержка Delphi XE2: имеется

Ещё один достаточно разработчик, получивший заслуженную популярность своим продуктом под названием cnWizards, предоставил нам набор компонентов для локализации приложений. Эти компоненты входят в состав отдельного пакета — cnVCL и распространяются бесплатно.

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

Итак, после установки пакета cnVCL в палитре компонентов появляется сразу несколько новых вкладок:

на влкадке cnMultiLang расположены 4 компонента для локализации. Три из них: TCnLangManager, TCnLangTranslator и TChHashLangFileStorage или TChIniLangFileStorage должны быть размещены в приложении.

Надо сказать, что Alpha-версия дает о себе знать. Чтобы по-быстрее разобраться с работой этих компонентов я решил запустить небольшую демку, которая идет в комплекте с исходниками компонентов…она, конечно, открылась в Delphi XE2, но что-то уж как-то совсем странно:

Ну да это, в принципе, терпимо — исходник-то, вроде бы не сильно «покорежин» и разобраться с тем, что и как работает более-менее удалось. Суть работы такова:

1. Бросаем на форму приложения три вышеобозначенных компонента (я выбрал TCnLangManager, TCnLangTranslator и TChIniLangFileStorage)

2. Теперь выбираем TChIniLangFileStorage и добавляем в коллекцию Languages новые языки. Выглядеть это должно примерно так:

3. У TCnLangManager в свойстве LanguageStorage указываем наш компонент CnIniLangFileStorage1

4. Делаем двойной клик по TCnLangTranslator — откроется редактор для перевода строк:

5. Выбираем в дереве необходимый язык и жмем «Gen All» — должна собраться таблица со строками для перевода. У меня она оказалась вот такой:

6. Переводим необходимые строки, ненужные строки — удаляем, сохраняем полученную таблицу в файл. Получаем в итоге ini-файл, который надо бросить рядом с exe-файлом нашего проекта.

7. Пишем в любом удобном месте программы одну строку:

Локализация приложения Windows Desktop

Я начинаю небольшой проект в С#/WPF, пишущем настольное приложение Windows. Однако поиск информации о том, как локализовать приложение, кажется более сложным. Большая часть информации, которую я нахожу, очень абстрактна и требует больше планирования, чем фактического кода и как это сделать.

Поскольку я пишу небольшое приложение, мне просто нужно очень просто объяснить «как» перевести текст и передовые практики.

У кого-нибудь есть опыт, который может поделиться некоторыми ресурсами или некоторыми указателями в правильном направлении?

При использовании этого вы можете сделать что-то вроде:

и содержимое кнопки вытягивается из ресурсов.

После настройки он очень прост в использовании, и хорошее введение в него можно найти ЗДЕСЬ.

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

Если это всего лишь небольшое приложение, и все, что вы хотите сделать, это изменить текст, основанный на культуре, вот очень простой пример:

Рубрика «локализация интерфейса»

Локализация приложения и поддержка RTL. Доклад Яндекс.Такси

При локализации сервиса важно внимательно отнестись к согласованию переводов между собой. Руководитель группы клиентской Android-разработки Яндекс.Такси Александр Бонель рассказал, какие практики и инструменты упрощают локализацию. Во второй части доклада Саша поделился опытом поддержки языка RTL в приложении: что хорошо, а что не совсем работает у Андроида из коробки, какие проблемы возникают из-за поддержки RTL и как их минимизировать в будущем.

— В своем докладе я хочу рассказать, какие основные идеи и практики мы используем в командах разработки мобильных приложений Такси для решения вопросов, связанных с локализацией и актуализацией перевода в наших приложениях. Затем расскажу, как мы внедряли в приложение поддержку работы в режиме отрисовки справа налево.

Как не опозориться с локализацией и интернационализацией

На тему этой статьи меня натолкнула история из очень недавнего прошлого. Я зашёл на страничку продукта, именуемого Суперсайтом, компании Не Будем Тыкать Пальцами LLC (но люди из домейнерской индустрии узнают). Заходил я из своего уютного офиса в Латвии и с удивлением обнаружил следующую картину:

И меня, мягко говоря, смутила валюта, в которой была указана стоимость услуг. Ведь на дворе вторая половина 2020 года, а латвийский лат официально прекратил своё существование в январе 2014 и был заменён на евро. И за 4 года не упомянутая выше компания не удосужилась провести ревизию используемых локалей.

Под катом я расскажу, что следует помнить при интернационализации и локализации своего продукта и где черпать данные для периодических ревизий.
Читать полностью »

Чем малайский отличается от индонезийского, или рассказ о том, как мы переводили приложение на 35 языков

Человек человеку — друг, товарищ и переводчик. И особенно тот переводчик товарищ, который работает с локализацией. Как правило, проще всего локализировать мобильные приложения: объем текста небольшой, специальных терминов мало. Это если языков перевода немного, скажем, десять. А вот мы недавно делали локализацию на 35 (!) языков.

О том, как искали исполнителей, преодолевали трудности и какие были забавные моменты, — эта статья.
Читать полностью »

Дизайн мультиязычных приложений

Представьте себе: вы впервые знакомитесь с новым приложением. В отзывах на Твиттере все сходят от него с ума, говорят, что оно превосходное, изумительное, всю жизнь им изменило.

Вы запускаете приложение и видите следующее:

Хм. Что-то тут не так. Сверху встроено видео, но текст в нем — на языке, которого вы не понимаете. Формулировки какие-то странные, а надпись на кнопке даже не влезает на саму кнопку. Как такое может нравиться людям?

Оказывается, дело в том, что приложение изначально создавалось не на вашем родном языке. Его разработали на эльфийском, а потом уже перевели. Большинство людей использует эльфийскую версию и не знает, как все это выглядит на вашем языке.
Читать полностью »

7 шагов к локализации ПО

Компании постоянно ищут пути расширения своего бизнеса, и одним из типичных способов увеличения рынка сбыта является создание локализованных версий программного обеспечения для различных рынков по всему миру. В теории, это просто. Однако, существует множество подводных камней от неверно переведенного текста до внезапно переставшей работать программы. Как избежать «трудностей перевода»?

Как научить веб-приложение говорить на 100 языках: особенности локализации

Ключевой особенностью онлайн-сервисов является то, что к ним имеют доступ пользователи практически со всего мира, говорящие на разных языках. Если вы разрабатываете такой сервис и хотите, чтобы им могли пользоваться люди из разных стран, то вам нужно его перевести и адаптировать, иными словами — локализовать.

Идея написания этой статьи возникла после MoscowJS митапа, на котором я говорил о том, как происходит процесс локализации в компании Badoo. Но в этой статье я бы хотел рассказать немного подробнее об особенностях локализации на примере веб-приложений, о том, какие существуют решения для локализации и почему в Badoo пошли своим путем. Всем неравнодушным — добро пожаловать под кат.Читать полностью »

Локализация WPF-приложения и мгновенная смена культуры

Существуют разные способы локализации WPF-приложения. Самый простой и распространенный вариант — использование файла ресурсов Resx и автоматически сгенерированный к ним Designer-класс. Но этот способ не позволяет менять значения «на лету» при смене языка. Для этого необходимо открыть окно повторно, либо перезапустить приложение.
В этой статье я покажу вариант локализации WPF-приложения с мгновенной сменой культуры.
Читать полностью »

Локализация по кнопке «Build»

Здравствуйте Друзья! В статье вкратце расскажу о том, как применить локализацию к вашему приложению с помощью DevUtils ELAS for Microsoft Translation, это расширения для DevUtils ELAS Core.
Читать полностью »

Локализация с AngularJS

Добрый день, уважаемые читатели.

AngularJS — отличный Framework для создания ваших сайтов. На Хабре уже достаточно много про него написано, но почему то ни разу не затрагивалась тема локализации приложений. Тем не менее, поддержка локализации в нем есть и сегодня мы попробуем с ней разобраться.

Существует несколько способов локализации и мы рассмотрим несколько из них.
Читать полностью »

Локализация ApplicationBar с помощью Binding

Когда я учился разрабатывать приложения на основе MVVM мне жутко не понравилось, что во многих статьях показано как ApplicationBar создается во ViewModel. Там же кнопки и элементы меню заполняется локализованными строками. Я долго искал решение, и оно было найдено.
Внимание! Статья описывает только решение проблемы локализации панели приложения и подразумевает что читатели знакомы с основами XAML, MVVM, связыванием данных и локализацией приложений.
Читать полностью »

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL