flutter的多語言文件 英文版
中文版簡單來講,流程圖如下
簡單講一下整個流程
string order_list_waiting_for_review() => intl.message(
'waiting for the review',
name: "order_list_waiting_for_review",
locale: _localename
);
其中,方法名和name
必須保持一致(不要問我為何會有這種坑爹要求)。'waiting for the review'
是預設文案,locale
是當前的locale。
這樣定義的話,可以用下面的方式獲得文字
// text == "waiting for the review"
*.arb
是個中間產物,其內就是json文字。其實會有更多附加資訊,描述這個文字,不過在此省略。
生成的arb
檔案只是一種語言的,我們可以把它拷貝成n種語言對應的檔案,比如intl_en.arb
,intl_es.arb
等,並把內容的value都替換成對應語言的文案。
然後再執行下面這個命令,生成messages_*.dart
flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n \
我們再回過頭來看這段**
string order_list_waiting_for_review() => intl.message('waiting for the review',
name: "order_list_waiting_for_review",
locale: _localename
);
intl.message()
方法實際上是根據locale
獲取對應的message_*.dart
檔案,然後再通過name
找到對應的文案返回。
官方的方案雖然很長很繁瑣,但還是可以實現多語言的功能的,只是對於我們來講,它存在以下幾個問題:
起點的i18n.py是我們自己寫的python指令碼,一共有兩個作用
從美杜莎(阿里國際化文案管理平台)上獲得多語言文案,並重命名成arb
檔案。
前面說到,arb檔案其實是json格式的,美杜莎支援以json格式匯出文字,所以我們做的只是重新命名,不需要對內容進行更改。在
arb
檔案處理好後,會拿預設的(英語)文字去生成乙個dart檔案,這個dart檔案只用來作為中間產物,不會被其他dart使用的。
其中只包含如下內容
import 'package:intl/intl.dart';
class messagesindex
那麼,我們繼續呼叫生成最終產物的命令列
flutter pub pub run intl_translation:generate_from_arb --output-dir=lib/l10n \
--no-use-deferred-loading lib/messages_index.dart lib/l10n/intl_*.arb
發現檔案以及其內的文案已經被正確生成了。
我之所以這樣更改流程,其實只有兩個目的:
可以像讀map一樣的讀取多語言文案,而不是像呼叫方法那樣去讀取。
final string _localename;
// ......
} string str(string name)
// 重寫操作符,減少**量
operator (string messagename) => str(messagename);}
系統多語言實踐 二
1.多語言儲存 假設下面乙個場景 系統有乙個產品目錄需要維護,目錄名稱和描述需要支援多語言儲存。表結構設計如下 product category pk欄位 型別允許null 描述pk id varchar 36 n 類別id lang id varchar 36 n多語言id created on ...
FLEX實踐 多語言實現
今天在網上搜了一下flex的多語言實現方法,發現實現方式還挺多的 這裡介紹的多語言的實現方式其實不是我想要的,不過也可以實現一般的需求,下面來介紹我用到的多語言的實現方案 1 在命令列中執行命令 locale en us zh cn flex sdk目錄下預設存在en us目錄,如果想新增其他的語言...
ResourceProvider 多語言實現
1.在在web.config定義特定的culture和uiculture,如果應用自定義resource prodiver的話,加上resourceprovide ctorytype的設定 如 culture和uiculture也可以設定成auto,這樣就會取瀏覽器首選區域設定,dbresource...