| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- <?php declare(strict_types = 0);
- /*
- ** WeCom Center - tiny portable i18n layer.
- ** Translations live in locale/<lang>.php and return a flat key=>string map.
- ** Whatever language Zabbix is running in is used automatically; any missing
- ** key (or language without a file) falls back to English, so the module
- ** "speaks" every Zabbix language while remaining easy to extend.
- */
- namespace Modules\WecomCenter\Lib;
- use CWebUser;
- class I18n {
- private static string $locale_dir = '';
- private static array $strings = [];
- private static string $lang = 'en_US';
- public static function init(string $locale_dir): void {
- self::$locale_dir = rtrim($locale_dir, '/');
- self::$lang = self::currentLang();
- $en = self::loadFile('en');
- $loc = (self::$lang === 'en' || self::$lang === 'en_US') ? [] : self::loadFile(self::$lang);
- // English is the base; the active language overrides individual keys.
- self::$strings = array_merge($en, $loc);
- }
- private static function loadFile(string $lang): array {
- $file = self::$locale_dir.'/'.$lang.'.php';
- if (is_file($file)) {
- $data = include $file;
- if (is_array($data)) {
- return $data;
- }
- }
- return [];
- }
- /**
- * Current frontend language, e.g. "zh_CN", "en_US", "ru_RU".
- */
- public static function currentLang(): string {
- if (class_exists('CWebUser') && is_array(CWebUser::$data) && !empty(CWebUser::$data['lang'])) {
- return (string) CWebUser::$data['lang'];
- }
- return 'en_US';
- }
- public static function lang(): string {
- return self::$lang;
- }
- /**
- * Translate a key. Placeholders {1},{2}... are replaced with $args.
- */
- public static function t(string $key, array $args = []): string {
- $s = self::$strings[$key] ?? $key;
- foreach (array_values($args) as $i => $v) {
- $s = str_replace('{'.($i + 1).'}', (string) $v, $s);
- }
- return $s;
- }
- }
|