首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >配置、注册表和语言名称约定

配置、注册表和语言名称约定
EN

Stack Overflow用户
提问于 2011-02-04 18:49:45
回答 1查看 80关注 0票数 1

好吧,这是一个一直困扰着我的好问题。

Introduction

我正在开发一个应该是多语言和可定制的web应用程序。因此,我开发了一个注册表类(将对我的内部配置进行分组)和一个语言类,它将负责获取正确的语言文件(基于浏览器语言),并获得我需要的语言字符串。

,让我们深入

让我们谈谈这个类的用法

代码语言:javascript
复制
# config.reg.php
self::set('configuration-name');
# whatever-file.php
reg::get('configuration-name');

相同的代码用于语言类,它将具有

代码语言:javascript
复制
# 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**,并且我总是得到如下的结果:

代码语言:javascript
复制
self::set('that-error-message-that-appear-when-a-user-is-not-logged-in');

或者:

代码语言:javascript
复制
self::set('your-login-action-has-encountered-a-problem-please-get-back-later');

就语文而言,和:

代码语言:javascript
复制
self::set('that-cookie-name-used-in-X-file');

用于配置。...wich没那么棒。

最终问题

所以我想知道,有什么名字约定可以帮我度过难关,继续前进吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-04 19:07:38

首先,您的语言值不应该封装在注册表对象中。

您的注册表对象应该只包含诸如会话、语言、输入、输出等对象,因此您的静态类应该构建如下:

代码语言:javascript
复制
abstract class Registry
{
    public static function get($key)
    {
    }

    public static function set($key,$object)
    {
    }
}

然后将您的对象插入注册表,如下所示:

代码语言:javascript
复制
Registry::set("Language", new Language());

然后,您应该使用语言类来获取语言文件:

代码语言:javascript
复制
$Language = Registry::get("Language");
$Message = $Language->get("YourMessageKey");

关于命名约定,我建议您使用所有小写,并仅下划线(这是为了清楚)。

因此,下面一行:

代码语言:javascript
复制
that-error-message-that-appear-when-a-user-is-not-logged-in

会变成

代码语言:javascript
复制
that_error_message_that_appear_when_a_user_is_not_logged_in

但是这是一种长而无意义的方式,你应该做的是让你的语言是多维的,这样错误信息就包含在错误上下文中。

代码语言:javascript
复制
$Language->errors("user_not_logged_in");

它变得更加可读性更强,性能更好,因为您可以将上下文向上拆分成如下所示的单独文件

代码语言:javascript
复制
/locale/en/primary.php | loaded by default
/locale/en/errors.php
/locale/en/menu.php
/locale/en/user.php

每个文件只有在调用时才会加载,例如:

代码语言:javascript
复制
$Language->user("welcome_new_user");
/*         ^                      */

在您的语言类中,创建一个调用方法,以便能够进行这样的选择:

代码语言:javascript
复制
 public function __call($context,$params)
 {
     if(!$this->contextLoader($context))
     {
         $this->loadContext($context)
     }
     return $this->languages[$this->lid][$context][$params[0]];
 }

这将使事情变得更容易管理。

注意:

把你的脏嘴洗干净!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4901804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档