Flutter多語言實踐

2021-09-20 05:06:42 字數 2220 閱讀 8412

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...