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ữ.
====== Sử dụng ngôn ngữ trong module và template ======
===== Giao diện Smarty =====
> 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')}
===== Giao diện sử dụng Xtemplate =====
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
====== Hướng dẫn ngôn ngữ ở cấp độ hệ thống ======
**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);
===== Ngôn ngữ tạm =====
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, không phải là NV_LANG_INTERFACE hiện tại =====
Để đọ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.
===== Thay đổi ngôn ngữ đã đọc vào =====
Á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:
- Truyền cả $langkey và $langvalue dạng chuỗi.
- Chỉ truyền $langkey dạng mảng, không truyền vào $langvalue.