Gần đây tôi đã phát triển một Trò chơi Flash mà tôi đã dịch sang tiếng Đức và tiếng Anh. Bạn có thể xem tại đây: http://www.bioaschi.ch/?lang=en#/game . Bạn có thể thay đổi ngôn ngữ một cách nhanh chóng trong menu cài đặt .
Để dịch trò chơi, tôi đã sử dụng cách tiếp cận sau: Tôi có một lớp Cấu hình được viết tùy chỉnh về cơ bản chỉ là một sổ đăng ký của các cặp khóa => giá trị . Lớp cấu hình có thể đọc từ tệp XML và cũng gửi các sự kiện khi giá trị thay đổi.
Đối với trò chơi, tôi đã tạo 2 tập tin cấu hình khác nhau. Một là main
cấu hình, và sau đó một tệp chứa các bản dịch (được gọi lang
). Họ main
cấu hình chứa một khóa chỉ định ngôn ngữ, ví dụ. lang = vi . Trong trò chơi tôi lắng nghe sự kiện thay đổi trên phím đó. Bất cứ khi nào điều đó xảy ra, tôi đọc / áp dụng các giá trị từ ngôn ngữ thích hợp.
Đây là một đoạn mã nhỏ cho biết cách ngôn ngữ được chuyển đổi trong trò chơi:
Một nơi nào đó trong mã bảng "Cài đặt":
Config.getConfig('main').setValue('lang', 'de'); // or 'en'
Sau đó, bất cứ nơi nào khác mà văn bản cần được bản địa hóa:
// this is in the construtor or some init method
...
var cfg:Config = Config.getConfig('main');
cfg.addEventListener(ConfigEvent.CONFIG_CHANGE, onConfigChange);
updateText(cfg.getValue('lang', 'en') + '.');
}
private function updateText(langns:String) : void {
var langCfg:Config = Config.getConfig('lang');
this.title.htmlText = langCfg.getValue(langns + "credits.TITLE", "<title>");
this.text.htmlText = langCfg.getValue(langns + "credits.TEXT", "<text>");
_btnClose.label = langCfg.getValue(langns + 'highscore.CLOSE', 'X');
}
private function onConfigChange(evt:ConfigEvent) : void {
if(evt.key == 'lang'){
updateText(evt.value + ".");
}
}
Bạn có thể xem tập tin đang được trò chơi tải ở đây: http://www.bioaschi.ch/game/lingu.xml
Để thay thế các phần của văn bản bằng các biến (ví dụ: your score is %d
chuyển đổi thành your score is 10000
), tôi khuyên bạn nên sử dụng Thư viện dữ liệu đa giác tuyệt vời . Nó chứa một triển khai AS3 của Sprintf .
Thay vì có tất cả các bản dịch trong một tệp, bạn cũng có thể dễ dàng có một tệp duy nhất cho mỗi ngôn ngữ.
Để hoàn thiện, đây là một số danh sách mã:
Wow, đây là một bài viết dài, tôi xin lỗi. Cách tiếp cận tôi thực hiện khá đơn giản và không bao gồm các chủ đề phức tạp hơn về quốc tế hóa, như định dạng ngày , định dạng số hoặc tiền tệ, v.v ... Đối với các bản dịch đơn giản, nó chỉ hoạt động tốt.