好吧,这是一个一直困扰着我的好问题。
Introduction
我正在开发一个应该是多语言和可定制的web应用程序。因此,我开发了一个注册表类(将对我的内部配置进行分组)和一个语言类,它将负责获取正确的语言文件(基于浏览器语言),并获得我需要的语言字符串。
,让我们深入
让我们谈谈这个类的用法
# config.reg.php
self::set('configuration-name');
# whatever-file.php
reg::get('configuration-name');相同的代码用于语言类,它将具有
# it.lang.php
self::set('duck-you', 'Daffanculo');
# en.lang.php
self::set('duck-you', 'Duck you');
# whatever-file.php
lang::get('duck-you');实事
好了,现在。在为配置和语言索引选择正确的名称时,我总是会被标记为d**,并且我总是得到如下的结果:
self::set('that-error-message-that-appear-when-a-user-is-not-logged-in');或者:
self::set('your-login-action-has-encountered-a-problem-please-get-back-later');就语文而言,和:
self::set('that-cookie-name-used-in-X-file');用于配置。...wich没那么棒。
最终问题
所以我想知道,有什么名字约定可以帮我度过难关,继续前进吗?
发布于 2011-02-04 19:07:38
首先,您的语言值不应该封装在注册表对象中。
您的注册表对象应该只包含诸如会话、语言、输入、输出等对象,因此您的静态类应该构建如下:
abstract class Registry
{
public static function get($key)
{
}
public static function set($key,$object)
{
}
}然后将您的对象插入注册表,如下所示:
Registry::set("Language", new Language());然后,您应该使用语言类来获取语言文件:
$Language = Registry::get("Language");
$Message = $Language->get("YourMessageKey");关于命名约定,我建议您使用所有小写,并仅下划线(这是为了清楚)。
因此,下面一行:
that-error-message-that-appear-when-a-user-is-not-logged-in会变成
that_error_message_that_appear_when_a_user_is_not_logged_in但是这是一种长而无意义的方式,你应该做的是让你的语言是多维的,这样错误信息就包含在错误上下文中。
$Language->errors("user_not_logged_in");它变得更加可读性更强,性能更好,因为您可以将上下文向上拆分成如下所示的单独文件
/locale/en/primary.php | loaded by default
/locale/en/errors.php
/locale/en/menu.php
/locale/en/user.php每个文件只有在调用时才会加载,例如:
$Language->user("welcome_new_user");
/* ^ */在您的语言类中,创建一个调用方法,以便能够进行这样的选择:
public function __call($context,$params)
{
if(!$this->contextLoader($context))
{
$this->loadContext($context)
}
return $this->languages[$this->lid][$context][$params[0]];
}这将使事情变得更容易管理。
注意:
把你的脏嘴洗干净!
https://stackoverflow.com/questions/4901804
复制相似问题