必須將上一節產生的 JSON 檔案與 這樣可以在程式執行階段找到它。 請參閱:提供資料檔案給元件。
我們針對包裝資源製定了幾項慣例 (例如:本地化
資產)。這個架構必須能擴充至其他素材資源類型,
支援素材資源類型的組合,這項功能有時很實用
可呈現更複雜的裝置和語言代碼之間的關係 (
200 dpi 螢幕的希伯來文圖示版本)。以下所有路徑均與
套件的資料目錄,並可在執行中系統的 /pkg/data
下找到。
路徑 | 說明 |
---|---|
assets/ |
儲存所有素材資源。這與 meta/ 目錄包含套件資訊清單和其他中繼資料的方式類似。這個目錄日後可能會包含傳統索引。 |
assets/locales |
儲存語言代碼專屬的資料 |
assets/locales/fr-fr |
儲存特定語言代碼的資料。語言代碼名稱是 BCP47 格式的個別目錄。每個程式都會為這個目錄提供一個名為 program.json 的單一 JSON 檔案,其中名稱的 program 部分是由作者選擇。在某些情況下,我們可能需要確認這裡的檔案套件和程式庫名稱不會衝突。此外,基於 Fuchsia 的封裝策略,為方便更新,您可能需要支付許多用來儲存翻譯的小型檔案,而非單一檔案。 |
路徑結構的完整性,以及本地化資源的適當封裝 還是需要手動執行
封裝本地化資源
請參考範例,以封裝本地化資源。讓我們開始吧
與 BUILD.gn
檔案搭配使用,我們稍後可以把重點放在特定部分。
# Copyright 2020 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/components.gni")
import("//build/intl/intl_strings.gni")
group("example") {
testonly = true
deps = [ ":pkg" ]
}
executable("src_intl_example_bin") {
sources = [ "main.cc" ]
output_name = "src_intl_example"
deps = [
"//sdk/lib/syslog/cpp",
"//src/lib/intl/lookup/cpp:lib",
"//third_party/googletest:gtest_prod",
# This is the underlying generated FIDL code, must be included so that
# its settings make it to the -I flag for compiler invocation.
# Generate all needed intermediate resources.
":fuchsia.intl.l10n_hlcpp",
":l10n",
]
}
fuchsia_package_with_single_component("pkg") {
package_name = "src-intl-example"
component_name = package_name
manifest = "meta/src-intl-example.cml"
deps = [
# The binary to bundle in the package
":src_intl_example_bin",
]
deps += [
# These declaration works, but need to be maintained manually. Work is
# underway to make the "package" target collect and apply the locale files
# automatically.
":en-strings",
":es-strings",
":fr-strings",
# Contains the necessary ICU data.
"//src/intl:icudtl",
]
}
resource("en-strings") {
data_deps = [ ":l10n" ]
sources = [ "$target_gen_dir/en/l10n.json" ]
outputs = [ "data/assets/locales/en/l10n.json" ]
}
resource("fr-strings") {
data_deps = [ ":l10n" ]
sources = [ "$target_gen_dir/fr/l10n.json" ]
outputs = [ "data/assets/locales/fr/l10n.json" ]
}
resource("es-strings") {
data_deps = [ ":l10n" ]
sources = [ "$target_gen_dir/es/l10n.json" ]
outputs = [ "data/assets/locales/es/l10n.json" ]
}
intl_strings("l10n") {
source = "strings.xml"
source_locale = "en"
output_locales = [
"en",
"fr",
"es",
]
library = "fuchsia.intl.l10n"
}
用於產生本地化資源的建立規則
本地化資源是以檔案系統中的檔案為基礎。範例 //src/lib/intl/example 的程式說明 建構及部署內含本地化訊息的 Fuchsia 程式。
intl_strings("l10n") {
source = "strings.xml"
source_locale = "en"
output_locales = [
"en",
"fr",
"es",
]
library = "fuchsia.intl.l10n"
}
建構規則 intl_strings
會指示建構系統處理 XML
含有字串的檔案。請參閱訊息內容一節
翻譯進一步瞭解譯文
工作流程預設建構輸出內容中有已翻譯的訊息
對應的目錄值source = "strings.xml"
行指向檔案
包含訊息來源由於這類訊息一律使用
而且沒有特定語言的相關性會降低
其他方式時,你還需要將預設語言告知系統
strings.xml
的語言撰寫。
如要將預設語言設為英文,請在 BUILD.gn
中新增 source_locale =
"en"
。宣告輸出語言代碼可讓您指定確切的清單
輸入要產生的語言代碼資源這就是「output_locales
」
這種明確聲明的原因如下:
您想要明確宣告應用程式需要的語言代碼清單 要在執行階段正常運作
建構系統要求宣告輸入和輸出檔案 以便確保建構的正確性由於輸入和輸出檔案 系統會根據語言代碼產生名稱,而語言代碼宣告就足夠 才能處理這個問題
舉例來說,如果原始檔案名稱是 strings.xml
,語言代碼 fr
則是
列在 output_locales
中,建構系統預期的檔案名稱為
strings_fr.xml
。這些資源需與二進位檔一起封裝
放入 Fuchsia 套件中。
deps += [
# These declaration works, but need to be maintained manually. Work is
# underway to make the "package" target collect and apply the locale files
# automatically.
":en-strings",
":es-strings",
":fr-strings",
# Contains the necessary ICU data.
"//src/intl:icudtl",
]
請務必將 JSON 資源封裝至正確的目錄。適用對象
正確的目錄路徑
assets/locales/fr/l10n.json
表示法文的翻譯訊息。是
也需要套件 ICU 資料,詳情請參閱 icudtl.dat
區段。