Tôi gặp vấn đề với quốc tế. Tôi đang cố gắng triển khai hỗ trợ hai ngôn ngữ trong ứng dụng GWT của mình. Thật không may tôi không bao giờ tìm thấy một ví dụ hoàn chỉnh làm thế nào để làm điều đó với sự giúp đỡ của UiBinder. Đó là những gì tôi đã làm:Làm cách nào để triển khai i18n trong ứng dụng GWT?
mô-đun của tôi I18nexample.gwt.xml:
<?xml version="1.0" encoding="UTF-8"?>
<module rename-to='i18nexample'>
<inherits name="com.google.gwt.user.User" />
<inherits name='com.google.gwt.user.theme.clean.Clean' />
<inherits name="com.google.gwt.i18n.I18N" />
<inherits name="com.google.gwt.i18n.CldrLocales" />
<entry-point class='com.myexample.i18nexample.client.ExampleI18N' />
<servlet path="/start" class="com.myexample.i18nexample.server.StartServiceImpl" />
<extend-property name="locale" values="en, fr" />
<set-property-fallback name="locale" value="en" />
</module>
giao diện My Message.java:
package com.myexample.i18nexample.client;
import com.google.gwt.i18n.client.Constants;
public interface Message extends Constants {
String greeting();
}
Các gói phần mềm tương tự com.myexample.i18nexample.client
có ba thuộc tính tập tin :
Message.properti es:
greeting = hello
Message_en.properties:
greeting = hello
Message_fr.properties:
greeting = bonjour
tập tin UiBinder My Greeting.ui.xml:
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder
xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui"
ui:generateFormat="com.google.gwt.i18n.rebind.format.PropertiesFormat"
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator"
ui:generateLocales="default" >
<ui:with type="com.myexample.i18nexample.client.Message" field="string" />
<g:HTMLPanel>
<ui:msg key="greeting" description="greeting">Default greeting</ui:msg>
</g:HTMLPanel>
</ui:UiBinder>
Khi ứng dụng bắt đầu, tôi luôn nhận được đầu ra trong trình duyệt:
Default greeting
Tại sao? Tôi đang làm gì sai?
Tôi cố gắng để chạy các ứng dụng từ URL khác nhau:
http://127.0.0.1:8888/i18nexample.html?gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=en&gwt.codesvr=127.0.0.1:9997
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
Kết quả không thay đổi. Mặc dù tôi mong đợi trong trường hợp cuối cùng là một tin nhắn bonjour
.
Nếu ví dụ tôi sử dụng một g:Buttton
thay vì thông điệp ui:msg
:
<g:HTMLPanel>
<g:Button text="{string.greeting}" />
</g:HTMLPanel>
Sau đó, tôi nhận được như là kết quả của các nút với văn bản "hello"
Và nếu tôi nhập URL:
http://127.0.0.1:8888/i18nexample.html?locale=fr&gwt.codesvr=127.0.0.1:9997
Văn bản trên nút thay đổi thành "bonjour"
. Ở đây mọi thứ hoạt động như mong đợi. Nhưng tại sao quốc tế hóa không hoạt động trong trường hợp đầu tiên của tôi?
Và cho dù có sự khác biệt giữa những điều sau đây:
<ui:msg description="greeting">Default greeting</ui:msg>
<ui:msg description="greeting">hello</ui:msg>
<ui:msg description="greeting"></ui:msg>
Nếu có kết quả khác nhau trong những trường hợp này? Làm thế nào để viết đúng?
Vui lòng giải thích cho tôi nguyên tắc quốc tế hóa trong GWT và lý do tại sao ví dụ của tôi không hoạt động. Mọi đề xuất sẽ được đánh giá cao.
Xin lỗi, các tệp '.properties' của khóa học thực sự được đặt tên chính xác. Nó chỉ là một lỗi đánh máy. Cảm ơn bạn vì câu trả lời. Nhưng tiếc là nó không thêm rõ ràng cho tôi và vấn đề của tôi. Mọi thứ hoạt động bình thường mà không cần sử dụng UiBinder. Nhưng tôi muốn hiểu cách quốc tế hóa một ứng dụng chính xác với UiBinder. –
Bạn có thể viết chính xác những gì tôi cần sửa chữa hoặc cung cấp liên kết đến mẫu đã hoàn thành đầy đủ không? Tôi sẽ rất biết ơn! –
Xem https://developers.google.com/web-toolkit/doc/latest/DevGuideUiBinderI18n Nếu bạn muốn sử dụng 'ui: msg', bạn phải cung cấp các tệp thuộc tính trong cùng một gói, được đặt tên giống với giao diện UiBinder với hậu tố 'ImplGenMessages'. Ngoài ra, bạn có thể sử dụng 'com/google/gwt/i18n/client/LocalizedResource_ .properties' và/nhưng sau đó tập trung tất cả thư của bạn. Và một lần nữa, sử dụng '-gen' và nhìn vào mã được tạo ra. –