[程式] 小林丸指揮官的多國語言管理

看板GameDesign (遊戲設計)作者 (溺於黑暗)時間11年前 (2013/12/01 17:22), 編輯推噓3(305)
留言8則, 3人參與, 最新討論串1/1
小林丸指揮官的多國語言管理 參考連結 http://wp.me/pBAPd-od 說明 # 為了支援多國語言,遊戲中的各種顯示必須使用文字系統,而並非圖片,若要使用圖 片來切換語系,必須在不同語系的切換時進行圖片的切換,也就是必須將各語系的圖 片包為資源,動態切換。或是在發布專案之時就將語系圖片覆蓋。 # 但圖片的資源量一定高於文字。所以本專案大量使用文字做為顯示, 而不是使用圖片。 # 其缺點在於文字的字型並不好看。且在各平台上無法準確控制。 # 多國語言的建構分為幾個部分 ## 語言項,決定支援有哪幾個語言。 ## 文字管理器,負責讀入該語言的文字檔案,轉為文字表格儲存 ## 初始化,在系統初始時依照目前的語系,呼叫文字管理器設定一次文字表格。 ## 設定,遊戲進行途中進行切換,此時除了要更新文字表格之外,還必須立即更換 目前使用中的顯示文字。 # 由上所述,各顯示文字項目所儲存就不是文字,而是一個指向文字的指標,本遊 戲使用整數。 # 使用這樣架構的優點在於所有的文字都由一個文字檔所控制,每行算是一個文字內容 ,當需要多一個語系之時,就只需要將檔案交給翻譯人員全部翻譯完成即可。對系統 只需小部分更動。 語言項 # 在小林丸指揮官中共有英語及繁體中文兩項。 # 請參考腳本 Language.cs 。腳本中僅使用一個enum,看似簡單。但此enum就決定了 語系的擺放路徑命名。 # 命名習慣目前總共看過兩種,一種是大寫簡寫,使用這種的好處是路徑長度較短。 ## ENG 英語 ## CHS 簡體中文 ## CHT 繁體中文 ## JPN 日語 # 另一種是使用全文,閱讀上比較清楚。 ## English 英語 ## SimplifiedChinese 簡體中文 ## TraditionalChinese 繁體中文 ## Japanese 日語 # 儲存目前的語言項目,系統中必須將目前的語言項目儲存在,請見初始化相關說明。 ## 系統中 ## 裝置中 文字管理器 # 讀入目前使用語言的文字檔案,轉為文字表格儲存。 # 文字表格以Dictionary容器所儲存。 # 由遊戲各處向文字管理器要求文字時,會傳入一個索引,由文字管理器依照索引回傳 一個字串。 # 本作中讀入文字檔案的路徑為 Resources/[Language]/Data/Strs.txt 。其中 Resources為Unity指定路徑不需要傳入。 ## 若是英文語系其文字檔存放路徑是 Resources/English/Data/Strs.txt ## 若是繁體中文其文字檔存放路徑是 Resources/TraditionalChinese/Data/Strs.txt # 文字檔案內容大致如下 ## 英文 |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.| ## 繁體中文 |1001|小林丸指揮官| |1002|按鈕後進入| |1003|小林丸指揮官是一個無營利的同人原型遊戲。| |1004|開發自2012九月至2013二月。| |1005|歡迎回報任何臭蟲及意見。| # 文字檔案中各行包含其索引及內含的文字。 初始化 # 在遊戲開始之時進行初始化,請參照InitializeStrsManager.cs # 該模組依序進行 ## 自裝置中取出先前儲存的語系,如English/TraditionalChinese。將其設定存放 到文字管理器中。如果先前沒有儲存過此資料,則使用預設值。 ## 呼叫文字管理器做出第一次的文字檔案讀取,讓系統顯示正常。 顯示文字項目 # 各需要顯示多國語言的文字項目(本作是使用GUIText),都會掛上腳本 GUI_RetrieveTextAtEnable ,如果是段落文字則掛上  GUI_RetrieveTextParagraphAtEnable。 # 在腳本中會指定該文字項目要顯示文字的索引。 # 在該腳本初始化時,就會依照索引向文字管理器取得指定文字。 # 在該腳本初始化時,還會向文字管理器註冊自己,其用途請見後述設定章節。 設定 # 遊戲進行時,由使用者主動設定切換語系(本作中是在標題畫面)。請參照 ClickOn_SetLanguage.cs。 # 在該腳本中會呼叫文字管理器重新依照設定的語系讀取一次文字檔案。 更新文字表格。 # 然而,文字表格更新後並不會改變已經存在(建立完畢)的顯示文字項目。 # 因此才需要各文字項目在初始化取得所需文字之時, 向文字管理器進行一個註冊的動作。 # 文字管理器重新設定文字表格完畢後,就會向註冊的顯示文字項目,一一發送重新取 得(新語系)文字的命令,方完成當玩家切換語系時,畫面會立即更新的動作。在設 計模式中,這樣的架構稱之為觀察者模式。 -- "May the Balance be with U"(願平衡與你同在) 視窗介面遊戲設計教學,討論,分享。歡迎來信。 視窗程式設計(Windows CLR Form)遊戲架構設計(Game Application Framework) 遊戲工具設計(Game App. Tool Design ) 電腦圖學架構及研究(Computer Graphics) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.68.13.177 ※ 編輯: NDark 來自: 219.68.13.177 (12/01 17:23) ※ 編輯: NDark 來自: 219.68.13.177 (12/01 17:23)

12/01 18:32, , 1F
也許可以參考 GNU gettext XD
12/01 18:32, 1F
※ 編輯: NDark 來自: 219.68.13.177 (12/01 19:27) ※ 編輯: NDark 來自: 219.68.13.177 (12/01 19:27)

12/02 00:59, , 2F
看起來這作品是用C#寫的,我有一個問題:
12/02 00:59, 2F

12/02 00:59, , 3F
能否指點一下這種作法之於.NET內建的resource管理機制的
12/02 00:59, 3F

12/02 01:00, , 4F
優點?
12/02 01:00, 4F

12/02 01:07, , 5F
我能想到的一個優點為: 此設計允許在 runtime 重載資料
12/02 01:07, 5F

12/02 01:08, , 6F
而 resx 是在 compile time 就寫死的; 就看這個彈性值不
12/02 01:08, 6F

12/02 01:09, , 7F
得這些自創的機制的開發、維護費用
12/02 01:09, 7F

12/02 09:05, , 8F
其實這與語言無關.這架構好處是簡單.在任何平台建立都容易.
12/02 09:05, 8F
文章代碼(AID): #1Icl_fIh (GameDesign)
文章代碼(AID): #1Icl_fIh (GameDesign)