Мы разрабатываем большое приложение, состоящее из множества маленьких пакетов. Каждый пакет имеет свой собственный набор файлов ресурсов для локализации.
Каков наилучший подход к организации и именованию строк локализации?
Вот мои мысли до сих пор:
Обработка дубликатов
Один и тот же текст (скажем, «почтовый индекс») может встречаться несколько раз в пределах одного пакета. Программный инстинкт (СУХОЙ) говорит мне создать единый строковый ресурс, общий для всех вхождений .
С другой стороны, переводчик может захотеть выбрать длинный перевод («Postleitzahl») в некоторых местах и более короткий («PLZ») в местах с меньшим количеством места. Или мы можем решить добавить двоеточие в некоторых случаях («почтовый индекс:»), но не в других. Или мы можем потребовать другую прописную букву ("почтовый индекс") в некоторых местах. Все эти аргументы указывают на создание одного ресурса за использование, даже если их содержимое идентично .
Именование
Если мы стремимся устранить дубликаты, имеет смысл называть ресурсы по содержимому , возможно, намекая на тип использования через префикс. Таким образом, мы можем иметь labelOK
= "OK" , messageFileTooLarge
= "Файл превышает максимальный размер файла." и labelZipCode
= "Почтовый индекс" .
Именование по содержимому имеет преимущество, заключающееся в естественной обработке аргументов форматирования: ресурс messageFileHas_0_MBWhileMaximumIs_1_MB
явно принимает два аргумента форматирования: фактический размер файла и максимальный размер файла.
Однако, если мы допустим дублирование, присвоение имен только содержимым не имеет смысла. Чтобы получить уникальные имена ресурсов, мы должны как-то включить место использования в имя ресурса. Это работает для графических элементов управления, хотя идентификаторы имеют тенденцию становиться немного длиннее: fileSelectionConfirmationButtonText
= "OK" , customerDetailsTableColumnZipCode
= "Почтовый индекс" . Однако для невизуальных файлов кода это становится сложнее. Как вы называете конкретное использование строки, если не знаете, где она в конечном итоге будет отображаться? По коду файла и названию функции? Кажется довольно неуклюжим и хрупким для меня.
В целом, я склоняюсь к разрешению дубликатов, но я изо всех сил пытаюсь найти последовательную схему именования, которая поддерживает это.
Изменить: Этот вопрос имеет два аспекта: как организовать ресурсы (DRY против дубликатов) и как их назвать . Пока ответы сосредоточены на первом аспекте. Буду признателен за отзыв о соглашениях об именах!