【发布时间】:2015-11-05 16:06:28
【问题描述】:
我在构建网站时多次遇到这个问题。 我将以使用 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'的内容 前面提到的一些混合/组合
所有这些都有一些明显的优点和缺点,我不会尝试去理解,但 第 5 个 选项很可能是最好的解决方案,但仍然存在划线的问题尽量减少短语和内容的重复。
另一个问题是如何解决某些情况下首字母大写,另一些情况下小写以及结尾的标点符号的问题。
我对这个问题进行了研究,但没有明确的指导方针和/或可供学习的好例子。
欢迎所有意见。
【问题讨论】:
-
我知道没有明确的解决方案。尽管如此,仍然应该存在一些针对更复杂用例的指南和示例,或者至少是一种普遍认可的做事方式。
-
这正是我所强调的,没有“普遍同意的做事方式”。这里的基础工作由Laravel's Localization 提供,至于结构,这取决于您并且最适合您的项目。因为不同的应用程序有不同的内容,建议一个适合所有人的通用结构非常困难,而且通常你只会得到每个人的意见,off-topic 在 Stack Overflow 上。
-
是的,但仍然几乎没有任何大型用例的示例
-
尝试在 Laravel 4 中使用
trans函数,我使用它,它就像trans("menu.labels.users")这样的魅力,我将得到我使用的确切值,trans("menu.labels")将返回标签数组中的所有值
标签: php laravel web laravel-4 translation