NukeViet 5 sử dụng phần quản lý ngôn ngữ mới, khác với NukeViet 3 và 4. Lớp \NukeViet\Core\Language
được sử dụng để quản lý ngôn ngữ.
Nếu trong function chưa gọi global cần gọi global $nv_Lang
Trong php cần assign:
$tpl->assign('LANG', $nv_Lang);
Trong file tpl:
{$LANG->get('admin_logout_title')}
Nếu trong keylang có truyền tham số (%s, %d …) thì dùng
{$LANG->get('admin_logout_title', $para1, $para2 ...)}
Phương thức get sẽ tìm keylang theo thứ tự lang global, lang module, lang block. Nếu keylang không có sẽ xuất luôn keylang ra.
Nếu tìm riêng ở lang nhỏ hơn dùng
{$LANG->getModule('admin_logout_title')} {$LANG->getGlobal('admin_logout_title')} {$LANG->getBlock('admin_logout_title')}
Xuất lang ra trong php
$tpl->assign('GLANG', \NukeViet\Core\Language::$lang_global); $tpl->assign('MLANG', \NukeViet\Core\Language::$lang_module); $tpl->assign('BLANG', \NukeViet\Core\Language::$lang_block);
Trong file tpl dùng như cũ {MLANG.lang_key}
Không cần gọi global biến $nv_Lang nếu dùng Xtemplate
Khởi tạo lang
$nv_Lang = new \NukeViet\Core\Language();
Đọc ngôn ngữ global
$nv_Lang->loadGlobal($admin = false);
Nếu $admin = false thì đọc ở global.php nếu $admin = true đọc admin_global.php
Đọc ngôn ngữ module
$nv_Lang->loadModule($module_file, $admin = false, $modadmin = false);
Nếu $modadmin = true đọc ở includes/language/admin_xxx.php
Nếu $modadmin = false đọc ở modules/xxx/language/yyy.php tùy theo $admin mà đọc admin_vi.php hay vi.php
Đọc ngôn ngữ giao diện
$nv_Lang->loadTheme($global_config['module_theme'], $admin = false);
Nếu $admin = false đọc themes/xxx/language/vi.php ngược lại đọc admin_vi.php
Đọc ngôn ngữ install
$nv_Lang->loadInstall($lang);
Đọc file ngôn ngữ bất kỳ
$nv_Lang->loadBlock($filepath);
Ví dụ khi giao diện quét các file admin.menu.php để lấy ra menu của admin thì cần phải load các ngôn ngữ của module vào. Khi đó dùng:
$nv_LangTmp = new \NukeViet\Core\Language(); $nv_LangTmp->loadModule($mod, $admin, $modadmin, $temp);
Giá trị $temp
đưa vào là true, khi đọc thì hệ thống không làm ảnh hưởng đến các giá trị:
\NukeViet\Core\Language::$lang_global; \NukeViet\Core\Language::$lang_module; \NukeViet\Core\Language::$lang_block;
Sau khi dùng xong unset($nv_LangTmp);
để giải phóng bộ nhớ
Để đọc ngôn ngữ khác cần chú ý đến hai phương thức:
$nv_Lang->setLang($lang); $nv_Lang->changeLang($lang);
Nếu dùng setLang hệ thống sẽ làm rỗng toàn bộ lang hiện tại bao gồm ngôn ngữ tạm và cả phần
\NukeViet\Core\Language::$lang_global; \NukeViet\Core\Language::$lang_module; \NukeViet\Core\Language::$lang_block;
Nếu dùng changeLang
hệ thống chỉ làm rỗng ngôn ngữ tạm đã đọc để chuyển sang ngôn ngữ được change để đọc ⇒ Phần này dùng để thay đổi ngôn ngữ tạm cần đọc.
Khi dùng changelang
mà không truyền vào biến $lang
thì hệ thống sẽ giữ nguyên lang hiện tại, chỉ làm rỗng dữ liệu đã đọc.
Áp dụng khi cần nạp ngôn ngữ từ một mảng cố định vào ngôn ngữ đã đọc. Cú pháp:
$nv_Lang->setGlobal($langkey, $langvalue); $nv_Lang->setModule($langkey, $langvalue); $nv_Lang->setBlock($langkey, $langvalue);
Có hai cách sử dụng: