10/10/2018, 11:37

Đa Ngôn Ngữ website lập trình

Chào các anh các chị pro trong diễn đàn hiện tại em có một vất đề khó khăn đã tìm nhiều ngày nhưng chưa được , mong các bác giúp đỡ .
Vấn đề : Em đang làm về lập trình PHP , yêu cầu website phải có đa ngôn ngữ , tức là : khi click tiếng việt thì toàn bộ site sẽ ở dạng tiếng việt và click tiếng anh thì toàn bộ site sẽ sang tiếng anh

- nhiều bác đã nêu cho em cách là , tạo 2 site 1 site tiếng việt và 1 site tiêng anh , có điều emk thấy khả thi , chẳng hạn em đang ở 1 bài viết khi click sang tiếng anh thì nó quay về trang chủ . và hơn nữa , toàn vẹn dữ liệu rất khó khăn và không đảm bảo (em phải up 2 bài 1 TV và 1 TA)

- Em nghĩ chắc có bộ công cụ , hay code giúp đỡ về khoản chuyển đổi đa ngôn ngữ này , chẳng hạn session PHP , tạo ra 1 file chuyển đổi định dạng chứ TA và TV , khi click đến sẽ gọi file đó là thực thi , ý tưởng hơi điên dzồ 1 chút , các bác đừng chém em tội nghiệp

mong các bác giúp đỡ bác nào có demo hay code post cho em với , EM CHÂN THÀNH CÁM ƠN !
anh2604 viết 13:51 ngày 10/10/2018
Không ai làm như bạn cả, 1 website đa ngôn ngữ chỉ cần thay đổi cấu trúc csdl là được.

Ví dụ bạn có bảng category có các trường id_category, name, description, create_date.

Nếu bạn muốn đa ngôn ngữ bạn sẽ chia ra làm 2 bảng.

Bảng 1 là category có các trường id_category , create_date

Bảng 2 là category_lang có các trường id_category_lang, id_lang, id_category, name, description

id_lang là id của ngôn ngữ đó, khi ng sử dụng thay đổi tùy chọn ngôn ngữ nghĩa là id_lang thay đổi, bạn sẽ select các row trong category_lang có id_lang tương ứng.

Cách 2 là dịch toàn trang, bạn có thể dùng 1 mã javascript này

PHP Code:
<!-- Begin TranslateThis Widget -->
<
div id="translate-this"><a href="http://translateth.is/" class="translate-this-button">Translate</a></div>
<
script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript" src="http://x.translateth.is/translate-this.js"></script>
<script type="text/javascript">
TranslateThis();
</script>
<!-- End TranslateThis Widget --> 
Thấy có ích thì click vào link chữ ký , nếu ý tưởng đó hay thì LIKE và comment giúp t nhé
webjquery viết 13:53 ngày 10/10/2018
Về vấn đề đa ngôn ngữ thì có nhiều ý kiến khác nhau, có nhiều cách khác nhau. Tùy vào mục đích của người sử dụng và tùy thuộc vào người làm code. Cách nào cũng có những cái mặt được và chưa được của nó. Có nhiều website người ta làm toàn vẹn dữ liệu như bạn nói, nghĩa là khi chuyển link sang ngôn ngữ khác thì vẫn ở đó là nội dung thì được thay đổi bằng ngôn ngữ khác, ý tưởng bạn đưa ra là có một công cụ nào đó tự dịch kiểu Google Translate thì cũng có thì phải (Tôi chưa thử). nhưng có vẻ cách này hơi chuối ở chỗ là tự động dịch thì câu từ không được chính xác, nên sẽ mất đi độ chính xác của đoạn văn, nhất là đói với web thiên về tin tức.
Tôi thì vẫn làm tách riêng form nhập trong quản trị luôn. CSDL thì có trường "lang" chẳng hạn để phân biệt nó là thuộc ngôn ngữ nào. Truy vấn ra ngoài thì dựa vào trường này để xác định thôi
Tùy mỗi người một cách làm, không có cách nào hoàn hảo toàn bộ cả
GrouponClone viết 13:42 ngày 10/10/2018
Cách cách trên đều không khả thi, tuy mổi người mổi ý.

Như thế này, tôi có cách làm mà chẳng phải thêm, bớt tí database nào cả.

Ví dụ tôi có 1 bài viết :
Tiếng việt: đầy là bài viết đầu tiên.
Tiếng Anh: This's first post

bây giờ tôi lưu như thế này vào 1 trường duy nhất, giả sử the_title chẳng hạn

<!--vi-->đầy là bài viết đầu tiên.<!--endvi--><!--en-->This's first post.<!--enden-->

Khi show ra ngoài, bạn chỉ việc kiểm tra điều kiện tiếng anh, hay tiếng việt thì sẽ lấy được phần cần lấy.

cách này đơn giản, hiểu quả, không phải thêm table, field nào cả.
anh2604 viết 13:48 ngày 10/10/2018
Được gửi bởi webjquery
Về vấn đề đa ngôn ngữ thì có nhiều ý kiến khác nhau, có nhiều cách khác nhau. Tùy vào mục đích của người sử dụng và tùy thuộc vào người làm code. Cách nào cũng có những cái mặt được và chưa được của nó. Có nhiều website người ta làm toàn vẹn dữ liệu như bạn nói, nghĩa là khi chuyển link sang ngôn ngữ khác thì vẫn ở đó là nội dung thì được thay đổi bằng ngôn ngữ khác, ý tưởng bạn đưa ra là có một công cụ nào đó tự dịch kiểu Google Translate thì cũng có thì phải (Tôi chưa thử). nhưng có vẻ cách này hơi chuối ở chỗ là tự động dịch thì câu từ không được chính xác, nên sẽ mất đi độ chính xác của đoạn văn, nhất là đói với web thiên về tin tức.
Tôi thì vẫn làm tách riêng form nhập trong quản trị luôn. CSDL thì có trường "lang" chẳng hạn để phân biệt nó là thuộc ngôn ngữ nào. Truy vấn ra ngoài thì dựa vào trường này để xác định thôi
Tùy mỗi người một cách làm, không có cách nào hoàn hảo toàn bộ cả
Bác nên đọc lại comment của em đọc hết đừng bỏ đoạn nào nhé
anh2604 viết 13:49 ngày 10/10/2018
Được gửi bởi GrouponClone
Cách cách trên đều không khả thi, tuy mổi người mổi ý.

Như thế này, tôi có cách làm mà chẳng phải thêm, bớt tí database nào cả.

Ví dụ tôi có 1 bài viết :
Tiếng việt: đầy là bài viết đầu tiên.
Tiếng Anh: This's first post

bây giờ tôi lưu như thế này vào 1 trường duy nhất, giả sử the_title chẳng hạn

<!--vi-->đầy là bài viết đầu tiên.<!--endvi--><!--en-->This's first post.<!--enden-->

Khi show ra ngoài, bạn chỉ việc kiểm tra điều kiện tiếng anh, hay tiếng việt thì sẽ lấy được phần cần lấy.

cách này đơn giản, hiểu quả, không phải thêm table, field nào cả.
Cách của bác tiết kiệm k tạo bảng ^^. Nhưng bác sẽ phải đánh đổi bằng thời gian truy suất dữ liệu đấy, vì bác phải dùng lệnh LIKE, còn dùng id_lang do đánh số nên truy suất sẽ nhanh hơn. và cách của bác cũng gây ra dư thừa dữ liệu nữa.
zmt264 viết 13:50 ngày 10/10/2018
Được gửi bởi anh2604
Cách của bác tiết kiệm k tạo bảng ^^. Nhưng bác sẽ phải đánh đổi bằng thời gian truy suất dữ liệu đấy, vì bác phải dùng lệnh LIKE, còn dùng id_lang do đánh số nên truy suất sẽ nhanh hơn. và cách của bác cũng gây ra dư thừa dữ liệu nữa.
Theo cách hiểu của mình thì đấy là đưa hết dữ liệu Anh Việt về rồi tùy tình huống hiển thị 1 trong 2 thôi, ko phải Like và cũng ko thừa gì cả, tương tự như cách sau (mặc dù ko hoàn toàn giống vì cách của mình dùng JS rất nhiều và dịch từng câu 1, cách kia thì dịch cả bài): http://hoctudau.com/web-tools/getfiles/ (bấm đổi ngôn ngữ Anh - Việt sẽ thấy nó đổi tức thì, không load lại trang, ko AJAX)
anh2604 viết 13:50 ngày 10/10/2018
Được gửi bởi zmt264
Theo cách hiểu của mình thì đấy là đưa hết dữ liệu Anh Việt về rồi tùy tình huống hiển thị 1 trong 2 thôi, ko phải Like và cũng ko thừa gì cả
Nếu k dùng LIKE để lựa chọn luôn mà SELECT tất cả các ngôn ngữ cũng dẫn tới lượng bản ghi truy suất dữ liệu tăng, dẫn đến chậm

Mà comment trên của e là chỉ ra 2 cách mà, sao mọi ng chỉ đọc ra mỗi 1 cách dịch toàn trang vậy
1024KB viết 13:45 ngày 10/10/2018
Được gửi bởi anh2604
Nếu k dùng LIKE để lựa chọn luôn mà SELECT tất cả các ngôn ngữ cũng dẫn tới lượng bản ghi truy suất dữ liệu tăng, dẫn đến chậm

Mà comment trên của e là chỉ ra 2 cách mà, sao mọi ng chỉ đọc ra mỗi 1 cách dịch toàn trang vậy
cái này mới là không đọc kỹ nè.
Ý GrouponClone là chỉ với một dòng dữ liệu có id = 3 chẳng hạn, nhưng field the_title sẽ lưu tất cả các ngôn ngữ. Sau đó dựa vào tình trạng ngôn ngữ hiện tại mà lấy dữ liệu ngôn ngữ cho phù hợp dựa vào tag đã được quy định sẵn khi thêm dữ liệu.
Tương tự đối với the_content... và các dữ liệu khác cần chuyển đổi ngôn ngữ.
Và cách này đang được Wordpress sử dụng. Nếu không nhầm ^^!
zmt264 viết 13:46 ngày 10/10/2018
Được gửi bởi 1024KB
cái này mới là không đọc kỹ nè.
Ý GrouponClone là chỉ với một dòng dữ liệu có id = 3 chẳng hạn, nhưng field the_title sẽ lưu tất cả các ngôn ngữ. Sau đó dựa vào tình trạng ngôn ngữ hiện tại mà lấy dữ liệu ngôn ngữ cho phù hợp dựa vào tag đã được quy định sẵn khi thêm dữ liệu.
Tương tự đối với the_content... và các dữ liệu khác cần chuyển đổi ngôn ngữ.
Và cách này đang được Wordpress sử dụng. Nếu không nhầm ^^!
chuẩn, theo mình hiểu thì là 1 nội dung chứa đa ngữ luôn, cái này sẽ làm truy xuất dữ liệu nhanh hơn ấy chứ , mỗi tội dữ liệu về client sẽ hơi nặng 1 chút (gấp đôi text, nhưng text thì quá nhẹ so với ảnh và film nên cái đó chẳng đáng suy nghĩ) => site nào mà người dùng chuyển ngữ liên tục thì nên dùng cách này, còn site nào mà người dùng chọn xong ngôn ngữ rồi thì ko bao giờ chọn ngôn ngữ khác thì nên dùng mỗi ngôn ngữ 1 subdomain/path riêng.
Bài liên quan
0