<?LANG(no_download, 'you are not allowed to download')
而不是
$lang[no_download]
我认为这是在模板中嵌入语言字符串的更好方法。
在几乎所有PHP应用程序中,主要的语言占位符格式类似于<?=$lang['no_download']?>
或{{no_download}}
。其他设计人员/开发人员/翻译人员很难在不参考语言文件的情况下解读占位符所代表的内容。
为了使语言占位符更具描述性,为什么我们不将原始字符串与占位符一起包含在内? e.g。
<?=lang( 'no_download' , 'You are not allowed to download this file because you have exceeded your quota' )?>
第二个参数是一个虚拟参数,因此lang()函数没有对它进行任何操作。
乍看之下,人们可能会认为它过于冗长,给模板标记添加了混乱。 但在我看来,它不是一个有效的参数,因为语言字符串如果没有语言意识就会占用占位符那么多的空间。
我想听听你对此的看法。
答案 0 :(得分:1)
编辑 没有看到这被标记为Smarty。如果你想要Smarty特定答案,请忽略我的答案。
我不同意有主要的占位符格式。一般来说,格式取决于您如何处理翻译,而且可能会有所不同。
除此之外,提供默认语言字符串作为翻译标签并不罕见。例如,在Zend Framework手册中,这是他们usage example的一部分。如果您的翻译适配器支持,那没有错。如果它需要ID,那么它不是一个选项。
就个人而言,我更喜欢ID并尝试根据它们在应用程序中的用法来命名,例如: form.label.login.username或cart.checkout或flashmessage.notice。
使用ID还提供了另一层分离。鉴于发短信可能不属于开发人员或模板设计师的责任,最好在模板中使用ID。
答案 1 :(得分:1)
在我看来,考虑为你的参赛作品设置好的描述性“键”是明智之举...... 你的“no_download”键没有很好地描述消息,因为它没有动词。
Keys,必须以良好的命名约定以及变量和函数命名。
您的密钥应该是例如:
{{user_quota_exeeded}}
或
{{user_quota_exeeded_alert}}
从长远来看,如果你的“真正的字符串”被改变而模板中的“虚拟参数”没有改变,它会欺骗你的一些同事/客户/ ....
此外,它会强制您输入两次消息。
有关wikipedia的命名惯例的更多信息。
答案 2 :(得分:0)
Gettext已经这样做了。它是这样的:
_('Gettext does this already. It goes something like this:');
答案 3 :(得分:0)
这些都是很棒的答案,很棒的见解,伙计们。
Arno,我非常了解命名约定。 我的示例语言密钥确实不是很恰当地命名,但它只是作为一个例子。在我的Web应用程序的整个翻译过程中,我遇到了难以用几个字符串概括/描述的字符串,因此想到将默认语言字符串包含为翻译标签。我敢肯定,如果你在翻译方面做得足够多,你会遇到这种情况。
无论如何,看到Zend&amp; amp; Gettext已经采用了这种方法。
突然出现的另一个问题是性能损失。
将使用函数调用,例如LANG()占用的资源比简单地打印$ lang []数组要多得多吗?
dya的想法是什么?