我正在开发一个需要i18n支持的CMS。翻译字符串作为数组存储在语言文件(即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',
答案 0 :(得分:3)
使用英语单词作为键可以很好地工作,但是您可能会在以后遇到问题。随着应用程序的增长,您可能希望开始命名空间键,以便更容易找到,例如通过控制器和操作/目的/上下文。
示例:如果您有一个带有关键“类别”的翻译,那么就会阻止命名空间,例如“categories.flashes.failure”,它们对开发人员来说是表达的,而不会与文本过于紧密相关。
这是我如何处理上面的例子,假设没有WordsController; - )
t(:'words.categories', :default => 'Categories')
这也使得编写与翻译无关的测试更容易。
答案 1 :(得分:2)
关于文件命名约定,您可能希望使用ISO 639-2 Alpha 3代码: http://en.wikipedia.org/wiki/List_of_ISO_639-2_codes
答案 2 :(得分:1)
我见过的一个有趣的选择是使用英文字符串本身作为键:
// General
'CMS - USA / English' => 'CMS - USA / English',
'Save' => 'Save',
'Choose category' => 'Choose category',
...
需要注意的一些要点:
cms.styles
在应用中错误地显示为Stylists
。但是'Styles' => 'Stylists'
像拇指一样突出,特别是对于一行审核剧本。Category
之类的字词,因为它们出现在不同的地方。答案 3 :(得分:0)
您也可以改用gettext。