2013-11-04 47 views
0

目前我正忙於爲我的朋友寫一個應用程序。它適用於各種翻譯。我試圖找出的是如何實現'自定義'本地化。作爲一個例子,假設我們有en_US和en_US_Slang,我將如何將後者添加到本地化列表或NSLocalisedString下?可可NIB:自定義EN本地化

爲了解釋這種情況,這個人正在運行2個獨立的應用程序來保存他的樂隊的信息。一個是基於MS Access的,另一個是基於Filemaker Pro的(去圖?!)

該樂隊的各個成員或者在其上使用,或者在另一個上使用。他是唯一一個同時使用兩者的人。

目前,當您啓動應用程序(Mac App不是iOS)時,它會詢問您以前是否是FMP或Access用戶。

基於此,本地化的字符串還原爲各種應用程序中使用的術語。

即在MSAccess中,樂隊演出位置被稱爲「功能前提」,而在FMP中被稱爲「演出位置」。爲了避免必須重新培訓所有人(因爲他們爲我免費贈送生日演出免費),我認爲最快的方法是保留他們習慣的標籤,都是一樣的。

從我可以計算出它的:

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"en_Access"] forKey:@"AppleLanguages"]; 

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObject:@"en_FMP"] forKey:@"AppleLanguages"]; 

有人可以證實這一點還是有可能,我會指出我在正確的方向(也許有些蘋果文檔?)在我深入研究這個問題之前我更願意找出:)

謝謝

A

回答

1

本質上,您的想法是定義您自己的區域設置(en_Access和en_FMP)以獲得區分字符串。我不相信你可以在Mac OS X(或iOS)上這樣做,因爲系統只會識別它認爲有效的區域標識符。

有趣的是,您可以在Microsoft Windows上創建自定義區域設置,如here所述。但不是Mac OS X.

+0

另一種解決方法是什麼?我試圖避免在整個演出中使用if語句對所有內容進行雙重編碼:D –

+0

有多種選擇。沒有if語句遍佈整個地方,而是用自己的實現替換NSLocalizedString調用。它可以是一個帶有額外參數或兩種不同方法或OO方法的新方法(例如,定義一個LocalizedStringProvider類並有兩個不同的實例,一個用於舊術語,一個用於新術語) – Clafou