thắc mắc Hỏi về cách làm trang web nhiều ngôn ngữ VN,EN,CN,...

vinh998

Senior Member
Bác nào đã từng làm dự án to, nhỏ cho em hỏi cách để làm một trang web hỗ trợ nhiều ngôn ngữ khác nhau như tiếng việt, tiếng anh, tiếng pháp, hàn xẻng,..

Các cách em đã nghĩ ra:
1. Google Translate nhưng có vẻ câu chữ ko ko được ngon 100%.
2. Mỗi ngôn ngữ sẽ là 1 database khác.
3. Mỗi ngôn ngữ là 1 column khác (cái này có vẻ khoai vcl, khả năng ko dùng đc).

Em xin tham khảo thêm với ạ.
Xin cảm ơn.
 
Đơn giản hơn nhất thì save JSON {en: "...", jp: "...."}, PostgreSQL thì có thể dùng hstore.

Hay muốn tạo tables thì:

SQL:
CREATE TABLE `article` (
    `id` INT(11) UNSIGNED PRIMARY KEY,
    `title_text_id` BIGINT(20),
    `content_text_id` BIGINT(20)
);

CREATE TABLE `article_texts` (
    `lang_code` VARCHAR(2),
    `text_id` BIGINT(20),
    `text` TEXT,
    PRIMARY KEY (`lang_code`, `text_id`)
);

Tables đại loại thế. Ví dụ save title, mỗi lần save thì generate ra text id bằng max(text_id) +1, sau đó save cái title với tất cả languages muốn supports.

SQL:
INSERT INTO `article_texts` ('en', 1, 'title'), ('jp', 2, 'title in jp');

Cuối cùng thì lấy cái text_id save vào title_text_id
 
Đơn giản hơn nhất thì save JSON {en: "...", jp: "...."}, PostgreSQL thì có thể dùng hstore.

Hay muốn tạo tables thì:

SQL:
CREATE TABLE `article` (
    `id` INT(11) UNSIGNED PRIMARY KEY,
    `title_text_id` BIGINT(20),
    `content_text_id` BIGINT(20)
);

CREATE TABLE `article_texts` (
    `lang_code` VARCHAR(2),
    `text_id` BIGINT(20),
    `text` TEXT,
    PRIMARY KEY (`lang_code`, `text_id`)
);

Tables đại loại thế. Ví dụ save title, mỗi lần save thì generate ra text id bằng max(text_id) +1, sau đó save cái title với tất cả languages muốn supports.

SQL:
INSERT INTO `article_texts` ('en', 1, 'title'), ('jp', 2, 'title in jp');

Cuối cùng thì lấy cái text_id save vào title_text_id
à, cám ơn bác. Mỗi ngôn ngữ 1 record
 
tạo 3 bảng theo SQL
language(id, name)
configuration(id, user_defined_key)
configuration_translation(id, configuration_id, language_id, value)

hoặc tạo 1 bảng theo noSQL
configuration_translation(id, user_defined_key, language, value)

trên UI thì load 1 dictionary lên, dùng bảng configuration_translation thì sẽ dùng đc mọi chỗ trên frontend, dùng user_defined_key để get value
 
Có nhiều cách, tùy ngôn ngữ lập trình sẽ có cách thích hợp nhất.
Phổ biến nhất là sử dụng thư viện i18n như 1 số bạn đã nói. Ít phổ biến hơn là sài database.
Nếu sử dụng .net, thì có bộ resource file chuyên cho đa ngôn ngữ.
 
Nếu thím muốn đa ngôn ngữ ở các thành phần fix cứng thì các fw mình nghĩ đã hỗ trợ localization rồi. Còn động data thì như mình sẽ lưu 1 bảng ngôn ngữ cho đối tượng đó. VD: Post - PostLang (1-n). Bảng posts sẽ lưu thông tin chung như id, status, pushlish_date, v.v.. Còn bảng PostLang sẽ lưu các dữ liệu theo ngôn ngữ
 
Nếu thím muốn đa ngôn ngữ ở các thành phần fix cứng thì các fw mình nghĩ đã hỗ trợ localization rồi. Còn động data thì như mình sẽ lưu 1 bảng ngôn ngữ cho đối tượng đó. VD: Post - PostLang (1-n). Bảng posts sẽ lưu thông tin chung như id, status, pushlish_date, v.v.. Còn bảng PostLang sẽ lưu các dữ liệu theo ngôn ngữ
em nghĩ nếu dữ liệu lớn phải dùng bảng riêng rồi, còn dữ liệu nhỏ lưu thêm record cũng đc.
 
Back
Top