Php 更具描述性的语言字符串占位符?

Php 更具描述性的语言字符串占位符?,php,smarty,template-engine,Php,Smarty,Template Engine,我认为在模板中嵌入语言字符串的方法更好 在几乎所有的PHP应用程序中,主要的语言占位符格式类似于或{{no_download}。其他设计师/开发人员/翻译人员将很难在不参考语言文件的情况下破译占位符所代表的内容 为了使语言占位符更具描述性,我们为什么不将原始字符串与占位符一起包含? e、 g 第二个参数是一个伪参数,因此lang()函数不会对其执行任何操作 乍一看,人们可能会认为它过于冗长,给模板标记增加了混乱。 但在我看来,这不是一个有效的参数,因为如果不知道语言,语言字符串将占用与占位符

我认为在模板中嵌入语言字符串的方法更好

在几乎所有的PHP应用程序中,主要的语言占位符格式类似于
{{no_download}
。其他设计师/开发人员/翻译人员将很难在不参考语言文件的情况下破译占位符所代表的内容

为了使语言占位符更具描述性,我们为什么不将原始字符串与占位符一起包含? e、 g


第二个参数是一个伪参数,因此lang()函数不会对其执行任何操作

乍一看,人们可能会认为它过于冗长,给模板标记增加了混乱。 但在我看来,这不是一个有效的参数,因为如果不知道语言,语言字符串将占用与占位符相同的空间

我想听听你对此的想法。

编辑我没看到这被标记为Smarty。如果你想要一个聪明的具体答案,请忽略我的答案

我不同意存在占主导地位的占位符格式。通常,格式取决于您处理翻译的方式,并且可能会有所不同

除此之外,提供默认语言字符串作为翻译标签并不少见。例如,在Zend框架手册中,这是它们的一部分。如果您的翻译适配器支持,则没有问题。如果它需要ID,那么它不是一个选项

就我个人而言,我更喜欢ID,并尝试根据它们在应用程序中的用法来命名它们,例如form.label.login.username或cart.checkout或flashmessage.notice


使用IDs还提供了另一层分离。考虑到发短信可能不属于开发人员或模板设计师的责任,最好在模板中设置ID。

在我看来,最好考虑为你的条目设置很好的描述性“键”。。。 您的“no_download”键不能很好地描述消息,因为它缺少动词

键以及变量和函数必须按照良好的命名约定命名

您的密钥应该是,例如:

<?=lang( 'no_download' , 'You are not allowed to download this file because you have exceeded your quota' )?>

从长远来看,如果你的“真实字符串”被更改,而模板中的“伪参数”没有更改,那么它将愚弄你的一些同事/客户/

此外,它还强制您键入两次消息

有关上命名约定的详细信息。

已经这样做了。事情是这样的:

{{user_quota_exeeded_alert}}

这些都是很好的答案,很好的见解,伙计们

阿诺,我非常了解命名惯例。 我的示例语言键的命名确实不太恰当,但这样做只是为了作为示例。在我的web应用程序的整个翻译过程中,我遇到了一些难以用几个字符串来概括/描述的字符串,因此考虑将默认语言字符串作为翻译标签。我相信如果你在翻译方面做的足够多,你会遇到这种情况

不管怎样,看到Zend&Gettext已经采用了这种方法是令人欣慰的

另一个突然出现在我脑海中的问题是性能惩罚

使用函数调用(例如LANG())会比简单地打印$LANG[]数组占用更多的资源吗?

你觉得呢

<?=lang( 'no_download' , 'You are not allowed to download this file because you have exceeded your quota' )?>
{{user_quota_exeeded}}
{{user_quota_exeeded_alert}}
_('Gettext does this already. It goes something like this:');