我在构建网站时多次遇到此问题。 我会解释一下使用PHP和Laravel作为例子,但这个问题是一个常见的多平台。 这已经解决了几个问题(post1,post2,post3,post4和其他一些),但帖子并没有真正得到一个很好的答案。构建网站翻译文件
现在的问题是:在语言文件中构建翻译内容的最佳方式是什么?
我目前使用Laravel(我不是提版本,因为这两个Laravel 4和Laravel 5有类似的定位功能,至少是相似的足以让这个话题的效果影响不大)。
本地化结构的内容跨越语言文件(en,es,de,fr ...),其中可能有多个.php文件包含返回多级字典结构的返回语句。
/lang
/en
messages.php
/es
messages.php
和文件包含的东西是这样的:
//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'
的分组浮现在脑海中的几种方法:
<?php
return [
'example1' => 'example message for value exaple-key',
'example2' => [
'sub-example' => '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'
提到的那些的一些混合/组合的内容通过直接翻译中将不会尝试去int,但5th选项最有可能是最好的解决方案,但仍然存在着在哪里画线以获得最小重复的短语和内容的问题。
另一个问题是如何解决在某些情况下大写第一个字符和其他情况下小写以及末尾标点符号的问题。
我对此问题做了研究,但没有明确的指导方针和/或可用的示例。
欢迎您提出意见。
您是否认为您提到的问题没有提供明确答案,可能是因为没有包含项目中所有可能用例的权威解决方案?你已经列出了5种可能的解决方案,所有这些解决方案都是可行的。所以只要选择一个最适合你的项目。至于你的问题的第二部分,它可以像使用['ucfirst'](http://php.net/manual/en/function.ucfirst.php)或['lcfirst'](http:/ /php.net/manual/en/function.lcfirst.php),如果需要,或者需要复杂的话,因为再次没有通用的解决方案。 – Bogdan
我知道没有确定的解决方案。尽管如此,即使如此,对于更复杂的用例,也应该存在一些指导方针和示例,或者至少应该有一个普遍认同的做法。 – Traveller
这正是我所强调的,没有“普遍认同的做事方式”_。这里的地面工作由[Laravel的本地化](http://laravel.com/docs/5.1/localization)提供,就结构而言,这取决于您,以及最适合您项目的东西。因为不同的应用程序有不同的内容,建议一个适合所有人的通用结构非常困难,并且通常你只会得到每个人的意见,这是[off-topic](http://stackoverflow.com/help/on-主题)在这里堆栈溢出。 – Bogdan