2011-07-07 40 views
6

Cách tốt nhất để xử lý quốc tế hóa/bản địa hóa trong Android WebView là gì. Lý tưởng nhất, tôi muốn truy cập vào tất cả các nguồn lực trong chuỗi:Android WebView Internationalization

res/values ​​/ strings.xml res/values-de/strings.xml ...

Có ai làm điều này một cách hiệu quả ?

thông tin Android Localization: http://developer.android.com/guide/topics/resources/localization.html

nhất, - Thomas Amsler

+0

Một cách để làm điều này là thực hiện lời gọi JS đến hoạt động cho mỗi trang và nhận các tài nguyên stings.xml cần thiết rồi hiển thị chúng trong webview qua jQuery. Có vẻ như có một cách hiệu quả hơn để gửi tất cả các tài nguyên strings.xml cần thiết đến webview khi khởi động. – tamsler

Trả lời

10

Để tải một số dữ liệu được bản địa hóa trong chế độ xem web, tôi đã tạo một chuỗi chứa URL được bản địa hóa và sử dụng để tải tệp HTML. Vì vậy, ví dụ như một chuỗi:

<string name="url_to_load">file:///android_asset/localized_ru.html</string> 

tham chiếu một tệp localized_ru.html trong thư mục /assets, và sau đó trong hoạt động:

webView.loadUrl(getString(R.string.url_to_load)); 

tôi đã sử dụng gián tiếp này thông qua một chuỗi từ assets/ thư mục không cục bộ và tải tài nguyên bằng URL không hoạt động đối với tôi.


Nếu bạn thực sự muốn để có thể tải tất cả các nguồn lực chuỗi từ webview của bạn, bạn có thể tạo một JavaScript giao diện và một lớp helper đơn giản:

class Localizer { 
    private Resources res; 

    public Localizer(Resources res) { 
     this.res = res; 
    } 
    public String get(String key) { 
     int id = res.getIdentifier(key, "string", "org.example.app"); 
     return res.getString(id); 
    } 
} 

sau đó vượt qua đó đến webview trong hoạt động của bạn:

webView.getSettings().setJavaScriptEnabled(true); 
webView.addJavascriptInterface(new Localizer(getResources()), "localizer"); 
0

Bạn có thể gửi dữ liệu nguồn chuỗi cục bộ để WebView của bạn. Hãy xem xét WebView.postUrl()