必須將上一節產生的 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 區段。