Наименование ключей в файлах ресурсов - лучшая практика - PullRequest
17 голосов
/ 07 марта 2009

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

Скажем, у вас есть кнопка редактирования на нескольких экранах (один для редактирования пользователя, другой для редактирования группы). Вы можете использовать следующие ключи:

  • editUserButton.label = Редактировать пользователя ...
  • editGroupButton.label = Редактировать группу ...

или

  • editUser = Редактировать пользователя ...
  • editGroup = Редактировать группу ...

или

  • user.edit = Редактировать пользователя ...
  • group.edit = Редактировать группу ...

Какую схему вы предпочитаете и почему?

Ответы [ 5 ]

13 голосов
/ 07 марта 2009

Я префикс своих литералов по прецеденту или имени класса действия. например:

PlaceOrder.invalidId=Invalid id for order {0}
PlaceOrder.success=Your order {0} was successful
PlaceOrder.fail.visa=Your visa was ...
PlaceOrder.fail.communications=We could not...
PlaceOrder.submit=Buy now

Login=Login
Login.fail=Your credentials did not...
Login.alread=You are already logged in

Таким образом вы избегаете столкновений:

EditStudent=Edit
EditClass=Edit
EditCourse=Edit Course

... а также проще найти то, что вам нужно.

Другой способ, которым я группирую, - по сущности:

Person.id=#
Person.name=First name
Person.surname=Surname

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

Person.id=#
Class.id=#
Course.id=Course Id

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

no=no

, который использовался в качестве заголовка таблицы id (#) в верхней левой ячейке, но наш французский переводчик сделал это для французского:

no=non

... он думал, что это было слово «нет» (отрицательное от да). :)

Последний (но не менее важный) префикс имени класса поможет вам, когда вы захотите реорганизовать / переименовать классы и быстро обновить эти ключи свойств, не обращая внимания на шаблоны.

0 голосов
/ 07 марта 2009

+ 1 за ответ @ cherouvim, но это всегда сводится к документации.

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

Так что сообщение вроде:

Невозможно запланировать задание {0} до {1}.

будет задокументировано как что-то вроде:

Зарегистрированное сообщение об ошибке, {0}: имя задания, {1} дата / время в формате ISO 8601.

0 голосов
/ 07 марта 2009

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

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

И не игнорируйте опасность омонимов. Предоставление контекста помогает предотвратить это. Не бойтесь сделать название ресурса длиннее, чем фактический английский термин, это может существенно помочь переводчикам.

0 голосов
/ 07 марта 2009

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

0 голосов
/ 07 марта 2009

Я думаю, что в первую очередь вы должны использовать какие-то XML-файлы для хранения таких данных.

Что-то вроде:

<? Xml version = "1.0" encoding = "utf-8" standalone = "yes"?>


<группа> Изменить группу


**

А затем используйте класс "translate", чтобы получить (и установить / сохранить) текст.

Что-то вроде:

myTranslateClass.load ('translate.xml');
myTranslateClass.get ('button', 'edit', 'user');

Это простой пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...