njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
Đa ngôn ngữ

Bảng chuỗi theo ngôn ngữ, chuỗi có tham số, ngôn ngữ dự phòng. Tiếp...

Các hàm

bool njin::i18n_load (context &ctx, const char *lang, const char *path)
 Nạp bảng chuỗi của một ngôn ngữ từ file JSON.
void njin::i18n_set_language (context &ctx, const char *lang)
 Chọn ngôn ngữ đang dùng.
const char * njin::i18n_language (const context &ctx)
 Mã ngôn ngữ đang dùng, hoặc chuỗi rỗng nếu chưa nạp ngôn ngữ nào.
void njin::i18n_set_fallback (context &ctx, const char *lang)
 Ngôn ngữ dự phòng: khi ngôn ngữ đang dùng thiếu một khóa thì lấy ở đây (thường là ngôn ngữ gốc của game).
std::vector< std::string > njin::i18n_languages (const context &ctx)
 Mã các ngôn ngữ đã nạp, theo thứ tự nạp.
const char * njin::i18n_language_name (const context &ctx, const char *lang)
 Tên hiện của một ngôn ngữ: khóa _name trong file của nó, hoặc chính mã.
const char * njin::tr (const context &ctx, const char *key)
 Chuỗi đã dịch của key trong ngôn ngữ đang dùng.
std::string njin::trf (const context &ctx, const char *key, std::initializer_list< std::string_view > args)
 Như tr(), rồi thay {0}, {1}... bằng các tham số theo thứ tự: câu dịch được đổi trật tự từ theo từng ngôn ngữ.
bool njin::i18n_has (const context &ctx, const char *key)
 Có khóa này trong ngôn ngữ đang dùng hoặc ngôn ngữ dự phòng không.

Mô tả chi tiết

Bảng chuỗi theo ngôn ngữ, chuỗi có tham số, ngôn ngữ dự phòng.

Thông tin về hàm

◆ i18n_load()

bool njin::i18n_load ( context & ctx,
const char * lang,
const char * path )

Nạp bảng chuỗi của một ngôn ngữ từ file JSON.

File là một object; object lồng nhau được nối tên bằng dấu chấm, nên hai cách viết sau là một:

{ "menu": { "play": "Chơi", "quit": "Thoát" }, "_name": "Tiếng Việt" }
{ "menu.play": "Chơi", "menu.quit": "Thoát", "_name": "Tiếng Việt" }

Khóa _name là tên ngôn ngữ để hiện trong menu (i18n_language_name()). Nạp lại cùng một ngôn ngữ thì chuỗi mới ghi đè chuỗi cũ, nên có thể chia bảng thành nhiều file. Ngôn ngữ nạp đầu tiên thành ngôn ngữ đang dùng.

Các tham số
ctxContext của engine.
langMã ngôn ngữ, ví dụ "vi", "en".
pathĐường dẫn file JSON.
Giá trị trả về
false nếu không đọc được file (có ghi log).

◆ i18n_set_language()

void njin::i18n_set_language ( context & ctx,
const char * lang )

Chọn ngôn ngữ đang dùng.

Ngôn ngữ chưa nạp bị bỏ qua (có ghi log).

Các tham số
ctxContext của engine.
langMã ngôn ngữ.

◆ i18n_language()

const char * njin::i18n_language ( const context & ctx)

Mã ngôn ngữ đang dùng, hoặc chuỗi rỗng nếu chưa nạp ngôn ngữ nào.

Các tham số
ctxContext của engine.
Giá trị trả về
Mã ngôn ngữ.

◆ i18n_set_fallback()

void njin::i18n_set_fallback ( context & ctx,
const char * lang )

Ngôn ngữ dự phòng: khi ngôn ngữ đang dùng thiếu một khóa thì lấy ở đây (thường là ngôn ngữ gốc của game).

Mặc định là ngôn ngữ nạp đầu tiên.

Các tham số
ctxContext của engine.
langMã ngôn ngữ.

◆ i18n_languages()

std::vector< std::string > njin::i18n_languages ( const context & ctx)

Mã các ngôn ngữ đã nạp, theo thứ tự nạp.

Dùng cho lựa chọn ngôn ngữ trong menu cài đặt.

Các tham số
ctxContext của engine.
Giá trị trả về
Danh sách mã.

◆ i18n_language_name()

const char * njin::i18n_language_name ( const context & ctx,
const char * lang )

Tên hiện của một ngôn ngữ: khóa _name trong file của nó, hoặc chính mã.

Các tham số
ctxContext của engine.
langMã ngôn ngữ.
Giá trị trả về
Tên.

◆ tr()

const char * njin::tr ( const context & ctx,
const char * key )

Chuỗi đã dịch của key trong ngôn ngữ đang dùng.

Thiếu thì lấy ở ngôn ngữ dự phòng; thiếu nữa thì trả về chính key (và ghi log một lần), nên chữ thiếu dịch hiện ra rõ ràng thay vì mất hẳn.

njin::ui_button(ctx, njin::tr(ctx, "menu.play"));
const char * tr(const context &ctx, const char *key)
Chuỗi đã dịch của key trong ngôn ngữ đang dùng.
bool ui_button(context &ctx, const char *label, bool enabled=true)
Một nút bấm.

Chuỗi trả về còn hợp lệ đến khi nạp thêm file hay đổi ngôn ngữ.

Các tham số
ctxContext của engine.
keyKhóa.
Giá trị trả về
Chuỗi UTF-8.

◆ trf()

std::string njin::trf ( const context & ctx,
const char * key,
std::initializer_list< std::string_view > args )

Như tr(), rồi thay {0}, {1}... bằng các tham số theo thứ tự: câu dịch được đổi trật tự từ theo từng ngôn ngữ.

// "hud.coins": "Vàng: {0}/{1}"
njin::trf(ctx, "hud.coins", {std::to_string(coins), std::to_string(total)});
std::string trf(const context &ctx, const char *key, std::initializer_list< std::string_view > args)
Như tr(), rồi thay {0}, {1}... bằng các tham số theo thứ tự: câu dịch được đổi trật tự từ theo từng n...
Các tham số
ctxContext của engine.
keyKhóa.
argsGiá trị thay vào.
Giá trị trả về
Chuỗi đã thay.

◆ i18n_has()

bool njin::i18n_has ( const context & ctx,
const char * key )

Có khóa này trong ngôn ngữ đang dùng hoặc ngôn ngữ dự phòng không.

Các tham số
ctxContext của engine.
keyKhóa.
Giá trị trả về
true nếu có.