Формат кросс-платформенного ресурса локализации - PullRequest
3 голосов
/ 10 марта 2011

Я хочу сохранить мои замещающие строки (немецкий, французский и т. Д.) В стандартном формате и использовать их на платформах Windows и Linux. Таким образом, файлы ресурсов VC ++ исключаются сразу.

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

  1. «ключ» для индексации строк l10n сам по себе является английской строкой, а не перечислением.
  2. формат может содержать дайджест сообщения, поэтому я могу убедиться, что не было взлома.

Моим намерением было бы использовать функцию (например, wstring foo = GetString(L"I am %1% years old");), которая передает функции boost :: format или boost :: wformat. Обратите внимание, что ключ, передаваемый в GetString, является строкой, а не перечислением.

Очевидно, что я могу использовать любой формат XML (или другой), который я хотел бы придумать. Но я бы предпочел использовать что-то стандартное.

Ответы [ 3 ]

1 голос
/ 20 марта 2011

Для стандартного формата используйте gettext и msgfmt для создания двоичных файлов .mo. Формат исходит от Unix, но его можно использовать на разных платформах Audacity, который является Linux / Mac / Windows, использует его.

1) Ключ является английской строкой.
2) Стандартный формат не имеет анти-трамбовочного подхода, поэтому вам нужно приготовить свой собственный.

Существует также редактор, poEdit и режим emacs для работы с переводами в промежуточном текстовом формате .po.

0 голосов
/ 11 марта 2011

Не уверен, есть ли он, но если есть вероятность, он упоминается где-то на lisa.org: http://www.lisa.org/Standards.30.0.html

0 голосов
/ 10 марта 2011

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

Использование было чем-то вроде Translated = String :: Format (I18N («Мне% d лет»), годы);

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

К сожалению, я не могу найти никаких атрибутов автора в источнике.

...