BSH · Programming

小林丸指揮官的多國語言管理


小林丸指揮官的多國語言管理

參考連結

小林丸指揮官開源專案 https://github.com/NDark/KobayashiMaruCommanderOS/wiki/Multilanguage

說明

  1. 為了支援多國語言,遊戲中的各種顯示必須使用文字系統,而並非圖片,若要使用圖片來切換語系,必須在不同語系的切換時進行圖片的切換,也就是必須將各語系的圖片包為資源,動態切換。或是在發布專案之時就將語系圖片覆蓋。
  2. 但圖片的資源量一定高於文字。所以本專案大量使用文字做為顯示,而不是使用圖片。
  3. 其缺點在於文字的字型並不好看。且在各平台上無法準確控制。
  4. 多國語言的建構分為幾個部分
    1. 語言項,決定支援有哪幾個語言。
    2. 文字管理器,負責讀入該語言的文字檔案,轉為文字表格儲存
    3. 初始化,在系統初始時依照目前的語系,呼叫文字管理器設定一次文字表格。
    4. 設定,遊戲進行途中進行切換,此時除了要更新文字表格之外,還必須立即更換目前使用中的顯示文字。
    5. 由上所述,各顯示文字項目所儲存就不是文字,而是一個指向文字的指標,本遊戲使用整數。
  5. 使用這樣架構的優點在於所有的文字都由一個文字檔所控制,每行算是一個文字內容,當需要多一個語系之時,就只需要將檔案交給翻譯人員全部翻譯完成即可。對系統只需小部分更動。

語言項

  1. 在小林丸指揮官中共有英語及繁體中文兩項。
  2. 請參考腳本 Language.cs 。腳本中僅使用一個enum,看似簡單。但此enum就決定了語系的擺放路徑命名。
  3. 命名習慣目前總共看過兩種,一種是大寫簡寫,使用這種的好處是路徑長度較短。
    1. ENG 英語
    2. CHS 簡體中文
    3. CHT 繁體中文
    4. JPN 日語
  4. 另一種是使用全文,閱讀上比較清楚。
    1. English 英語
    2. SimplifiedChinese 簡體中文
    3. TraditionalChinese 繁體中文
    4. Japanese 日語
  5. 儲存目前的語言項目,系統中必須將目前的語言項目儲存在,請見初始化相關說明。
    1. 系統中
    2. 裝置中

文字管理器

  1. 讀入目前使用語言的文字檔案,轉為文字表格儲存。
  2. 文字表格以Dictionary容器所儲存。
  3. 由遊戲各處向文字管理器要求文字時,會傳入一個索引,由文字管理器依照索引回傳一個字串。
  4. 本作中讀入文字檔案的路徑為 Resources/[Language]/Data/Strs.txt 。其中Resources為Unity指定路徑不需要傳入。
    1. 若是英文語系其文字檔存放路徑是 Resources/English/Data/Strs.txt
    2. 若是繁體中文其文字檔存放路徑是 Resources/TraditionalChinese/Data/Strs.txt
  5. 文字檔案內容大致如下
    1. 英文
      |1001|Kobayashi Maru Commander|
      |1002|Press To Enter|
      |1003|Kobayashi Maru Commander is a fan-based none-profit prototype|
      |1004|game project. I developped it from Sep. 2012 to Feb. 2013.|
      |1005|Enjoy and feel free to comment, and report bugs.|
    2. 繁體中文
      |1001|小林丸指揮官|
      |1002|按鈕後進入|
      |1003|小林丸指揮官是一個無營利的同人原型遊戲。|
      |1004|開發自2012九月至2013二月。|
      |1005|歡迎回報任何臭蟲及意見。|
  6. 文字檔案中各行包含其索引及內含的文字。

初始化

  1. 在遊戲開始之時進行初始化,請參照InitializeStrsManager.cs
  2. 該模組依序進行
    1. 自裝置中取出先前儲存的語系,如English/TraditionalChinese。將其設定存放到文字管理器中。如果先前沒有儲存過此資料,則使用預設值。
    2. 呼叫文字管理器做出第一次的文字檔案讀取,讓系統顯示正常。

顯示文字項目

  1. 各需要顯示多國語言的文字項目(本作是使用GUIText),都會掛上腳本 GUI_RetrieveTextAtEnable ,如果是段落文字則掛上 GUI_RetrieveTextParagraphAtEnable。
  2. 在腳本中會指定該文字項目要顯示文字的索引。
  3. 在該腳本初始化時,就會依照索引向文字管理器取得指定文字。
  4. 在該腳本初始化時,還會向文字管理器註冊自己,其用途請見後述設定章節。

設定

  1. 遊戲進行時,由使用者主動設定切換語系(本作中是在標題畫面)。請參照 ClickOn_SetLanguage.cs。
  2. 在該腳本中會呼叫文字管理器重新依照設定的語系讀取一次文字檔案。更新文字表格。
  3. 然而,文字表格更新後並不會改變已經存在(建立完畢)的顯示文字項目。
  4. 因此才需要各文字項目在初始化取得所需文字之時,向文字管理器進行一個註冊的動作。
  5. 文字管理器重新設定文字表格完畢後,就會向註冊的顯示文字項目,一一發送重新取得(新語系)文字的命令,方完成當玩家切換語系時,畫面會立即更新的動作。在設計模式中,這樣的架構稱之為觀察者模式。
廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s