colly_wyx
2018-04-27 74adf3a72663f151dc2c1b87ecb4ea4b0e080a50
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
/**
 * PhalApi_Translator 国际翻译
 *
 * - 根提供的语言包,进行翻译
 * - 优先使用应用级的翻译,其次是框架默认的
 * 
 * <br>使用示例:<br>
```
 *      //初始化,设置语言
 *      PhalApi_Translator::setLanguage('zh_cn');
 *
 *      //翻译
 *      $msg = T('hello {name}', array('name' => 'phper'));
 *      var_dump($msg);
```
 *
 * @package     PhalApi\Translator
 * @license     http://www.phalapi.net/license GPL 协议
 * @link        http://www.phalapi.net/
 * @author      dogstar <chanzonghuang@gmail.com> 2015-02-04
 */
 
class PhalApi_Translator {
 
    /**
     * @var array $message 翻译的映射
     */
    protected static $message = NULL;
 
    /**
     * @var array $language 语言
     */
    protected static $language = 'en';
 
    /**
     * 获取翻译
     * @param string $key 翻译的内容
     * @param array $params 动态参数
     * @return string
     */
    public static function get($key, $params = array()) {
        if (static::$message === NULL) {
            static::setLanguage('en');
        }
 
        $rs = isset(static::$message[$key]) ? static::$message[$key] : $key;
 
        $names = array_keys($params);
        $names = array_map(array('PhalApi_Translator', 'formatVar'), $names);
 
        return str_replace($names, array_values($params), $rs);
    }
 
    public static function formatVar($name) {
        return '{' . $name . '}';
    }
 
    /**
     * 语言设置
     * @param string $language 翻译包的目录名
     */
    public static function setLanguage($language) {
        static::$language = $language;
 
        static::$message = array();
 
        static::addMessage(PHALAPI_ROOT);
 
        if (defined('API_ROOT')) {
            static::addMessage(API_ROOT);
        }
    }
 
    /**
     * 添加更多翻译
     * 
     * - 为扩展类库或者外部提供更方便的方式追加翻译的内容
     *
     * @param string $path 待追加的路径
     * @return NULL
     */
    public static function addMessage($path) {
        $moreMessagePath = static::getMessageFilePath($path, static::$language);
 
        if (file_exists($moreMessagePath)) {
            static::$message = array_merge(static::$message, include $moreMessagePath);
        }
    }
 
    protected static function getMessageFilePath($root, $language) {
        return implode(DIRECTORY_SEPARATOR, 
            array($root, 'Language', strtolower($language), 'common.php'));
    }
 
    /**
     * 取当前的语言
     */
    public static function getLanguage() {
        return static::$language;
    }
}