i18n - Какие соглашения об именах использовать для создания языковых файлов? - PullRequest
1 голос
/ 12 мая 2010

Я разрабатываю CMS, которая требует поддержки i18n. Строки перевода хранятся в виде массива в языковом файле (т. Е. En.php). Есть ли какие-либо соглашения об именах для этого ..

Как улучшить приведенный ниже пример языкового файла ...

 // General
 'general.title' => 'CMS - USA / English',
 'general.save' => 'Save',
 'general.choose_category' => 'Choose category',
 'general.add' => 'Add',
 'general.continue' => 'Continue',
 'general.finish' => 'Finish',

 // Navigation
 'nav.categories' => 'Categories',
 'nav.products' => 'Products',
 'nav.collections' => 'Collections',
 'nav.styles' => 'Styles',
 'nav.experts' => 'Experts',
 'nav.shareyourstory' => 'Share Your Story',

 // Products
 'cms.products' => 'Products',
 'cms.add_product' => 'Add Product',

 // Categories
 'cms.categories' => 'Categories',
 'cms.add_category' => 'Add Category',

 // Collections
 'cms.collections'=> 'Collections',
 'cms.add_collections' => 'Add Collection',

 // Stylists
 'cms.styles' => 'Stylists',
 'cms.add_style' => 'Add Style',
 'cms.add_a_style' => 'Add a style',

 // Share your story
 'cms.share_your_story' => 'Share Your Story',

 // Styles
 'cms.add_style' => 'Add Style',

Ответы [ 4 ]

3 голосов
/ 24 сентября 2010

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

Пример. Если у вас есть перевод с ключевыми «категориями», это предотвратит использование пространств имен, таких как «Categories.flashes.failure», которые являются выразительными для разработчика и не слишком тесно связаны с текстом.

Вот как бы я справился с приведенным выше примером, предполагая, что нет WordsController; -)

t(:'words.categories', :default => 'Categories')

Это также облегчает написание тестов, которые не связаны с переводами.

2 голосов
/ 12 мая 2010

Что касается соглашений об именах файлов, вы можете использовать коды ISO 639-2 Alpha 3: http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes

1 голос
/ 12 мая 2010

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

// General
'CMS - USA / English' => 'CMS - USA / English',
'Save' => 'Save',
'Choose category' => 'Choose category',
...

Некоторые замечания:

  1. Это делает код приложения более читабельным и более прозрачным для разработчика. Разработчик может не заметить, что cms.styles неправильно отображается как Stylists в приложении. Но 'Styles' => 'Stylists' выделяется как больной палец, особенно для однострочного сценария аудита.
  2. Он более хрупкий, поскольку изменения в тексте на английском языке влияют на все остальные языковые файлы. Однако он должен давать сбои, поэтому его легко обнаружить.
  3. Это более надежно, поскольку производственная система может легко вернуться к тексту на английском языке, если тестирование не выявило упущения.
  4. Вам не нужно повторять такие термины, как Category только потому, что они появляются в разных местах.
0 голосов
/ 12 мая 2010

Вы также можете использовать gettext вместо.

...