Tra*_*ler 8 php translation web laravel laravel-4
我在构建网站时多次遇到这个问题.我将解释使用PHP和Laravel作为示例,但这个问题是一个常见的多个平台.这已经在几个问题中得到解决(post1,post2,post3,post4和其他一些问题),但帖子并没有真正得到一个好的答案.
问题是:在语言文件中构建翻译内容的最佳方法是什么?
我目前正在使用Laravel(我没有提到该版本,因为Laravel 4和Laravel 5都具有类似的本地化功能,至少与本主题的内容相似).
本地化构建了跨语言文件(en,es,de,fr ...)的内容,其中可以存在多个.php文件,这些文件包含返回多级字典结构的return语句.
/lang
/en
messages.php
/es
messages.php
Run Code Online (Sandbox Code Playgroud)
并且文件包含这样的内容:
<?php
return [
'example1' => 'example message for value exaple-key',
'example2' => [
'sub-example' => 'example message for example1.sub.example',
],
];
Run Code Online (Sandbox Code Playgroud)
通过这样做来调用这个:
//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'
Run Code Online (Sandbox Code Playgroud)
我想到了一些分组方法:
按网站内容
例: 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'
一些混合/前面提到的组合
所有这些都有一些明显的好处和缺点,我不会尝试去那个,但第五个选项很可能是最好的解决方案,但仍然存在哪里划线以获得最少的短语和内容重复的问题.
另一个问题是如何解决某些情况下的大写第一个字符和其他情况下的小写以及末尾的标点字符的问题.
我确实对这个问题进行了研究,但没有明确的指导方针和/或可供学习的好例子.
欢迎所有意见.
根据我的经验,除了尝试在其他地方使用您的翻译之外,没有理由建立不同的小组。我通常将所有项目消息放在一个名为app的组中,对于每个共享库,我使用单独的组名称(因为我可能会在其他项目中使用它们)。我的网站中登录失败消息的一个示例是
trans('app.username_and_password_do_not_match')
Run Code Online (Sandbox Code Playgroud)
如果它位于名为 Auth 的第三方库中,则为
trans('auth.username_and_password_do_not_match')
Run Code Online (Sandbox Code Playgroud)
请记住编写完整的消息作为消息键,而不是使用短名称(例如app.login.fail)。这样您就不需要每次翻译都检查网站内容。
我没有完全理解你的上一个问题,所以你可能想澄清一下。
归档时间: |
|
查看次数: |
800 次 |
最近记录: |