我在构建网站时多次遇到这个问题。 我将解释使用PHP和Laravel作为示例,但这个问题是一个常见的多个平台。 这已经在几个问题(post1,post2,post3,post4和其他一些问题中得到了解决,但这些帖子并没有真正得到一个好的答案。
问题是:在语言文件中构建翻译内容的最佳方法是什么?
我目前正在使用Laravel(我没有提及该版本,因为Laravel 4和Laravel 5都有类似的本地化功能,至少与本主题的相关内容相似)
本地化构建了跨语言文件(en,es,de,fr ...)的内容,其中可以存在多个.php文件,这些文件包含返回多级字典结构的return语句。
/lang
/en
messages.php
/es
messages.php
并且文件包含以下内容:
<?php
return [
'example1' => 'example message for value exaple-key',
'example2' => [
'sub-example' => 'example message for example1.sub.example',
],
];
通过这样做来调用这个:
//Laravel 5
trans('messages.example1'); //outputs 'example message for value exaple-key'
trans('messages.example2.sub-example'); //outputs 'example message for example1.sub.example'
//Laravel 4
Lang::get('messages.example1'); //outputs 'example message for value exaple-key'
Lang::get('messages.example2.sub-example'); //outputs 'example message for example1.sub.example'
我想到了一些分组方法:
按网站内容
示例:homepage.php, page1.php, page2.php...
:
示例:auth.php, validation.php, pagination.php...
通过html:
示例:buttons.php, popup_messages.php, form_data.php...
直接翻译:
示例:simple_words.php, phrases.php...
并包含'password-to-short' => 'your password is to long'
之前提及的一些混合/组合
所有这些都有一些明显的好处和缺点,我不会尝试去做那个但是 5th 选项很可能是最好的解决方案,但仍然存在问题在哪里划线以获得最少的短语和内容重复。
另一个问题是如何解决某些情况下的大写第一个字符和其他情况下的小写以及末尾的标点字符的问题。
我对此问题进行了研究,但没有明确的指导原则和/或可供学习的好例子。
欢迎所有意见。
答案 0 :(得分:0)
根据我的经验,除了尝试在其他地方使用您的翻译之外,没有理由拥有不同的群组。我通常将所有项目消息放在名为 app 的组中,对于我的每个共享库,我使用单独的组名(因为我可能在其他项目中使用它们)。 我网站上的失败登录消息示例是
trans('app.username_and_password_do_not_match')
如果它位于名为Auth的第三方库中,那么它将是
trans('auth.username_and_password_do_not_match')
请记住将完整邮件写为邮件密钥,而不是使用短名称(例如 app.login.fail )。这样您就不需要检查每个翻译的网站内容。
我没有完全理解你的上一个问题,所以你可能想稍微澄清一下。