2016-08-15 82 views
-1

我正在嘗試爲我的應用程序創建多種語言,因此我想將英語單詞翻譯爲不同的語言單詞,但我不確定如何創建課程並返回Translate("hello")之類的翻譯單詞,並且它會返回你好 。任何建議,而不是創建一個功能,因爲我不想做像Translate().convert("hello")這樣的東西,並得到「你好」的回報?謝謝。如何創建一個類並返回一些東西。 Swift

class Translate { 
    let englishToChineseDict = [ 
           "hello": "你好", 
           "hi": "你好" 
           ] 
    init(english: String) { 
     let word = englishToChineseDict[english] 
    } 
} 

回答

0

爲了讓您的應用程序支持多國語言,首先你需要添加本地化項目設置:

在左側窗格中選擇您的項目文件,然後在「本地化」部分添加本地化:

enter image description here

點擊 「+」 按鈕,並選擇中國(繁體),檢查所有的複選框:

enter image description here

我建議你也本地化爲簡體中國。因此,檢查這些複選框後,事情應該是這樣的:

enter image description here

你會看到一些新的.strings文件添加到項目中:

enter image description here

您可以本地化您的應用程序只需編輯這些文件。在文件中,你會看到這樣的事情:

"uel-mS-zq9.text" = "some text"; 

你基本上=標誌的右邊翻譯成所需的語言。這樣簡單:

"uel-mS-zq9.text" = "一些文字"; 

而你這樣做需要翻譯的所有文本。

但有時候,一些需要翻譯的文本不在故事板中。要翻譯這些,你需要在文件檢查器創建一個名爲Localizable.strings新的文件,並檢查這些複選框:

enter image description here

再次,你會發現每一個本地化的創建Localizable.strings文件。

如果你寫的東西,如:

"Settings" = "設定"; 
在中國傳統文件

,呼籲NSLocalizedString("Settings", comment: "")將返回設定。

欲瞭解更多信息,你可以檢查thisthis了。

+0

如果OP的代碼段是他實際的多語言實現,這很有幫助,但這不是真正的問題答案 –

+0

從OP的名字來看,他/她顯然是來自香港,廣東或馬來西亞的中國人。 @HeddevanderHeide – Sweeper

+0

是的。你是對的。我來自香港。我需要一些時間來消化你們所說的話。我會稍後投票。感謝您的幫助:) –

1

由於沒有屬性來初始化init方法沒有必要的,但一個方法translate。通過創建類的實例

class Translate { 
    let englishToChineseDict = [ 
           "hello": "你好", 
           "hi": "你好" 
           ] 
    func translate(english : String) -> String { 

     if let result = englishToChineseDict[english] { 
     return result 
     } else { 
     return "The term \(english) is not in the dictionary" 
     } 
    } 
} 

並使用它,並調用該方法

let translator = Translate() 
let chinese = translator.translate("hi") 

或者使用一個靜態類

static let englishToChineseDict = [ ... 
... 
class func translate(... 

,並調用它

let chinese = Translate.translate("hi") 

編輯

斯威夫特類不(在failable初始化與例外nil)返回任何東西,但作爲一種變通方法,你可以實現CustomStringConvertible協議,它改變了類指針爲字符串表示。

class Translate : CustomStringConvertible { 
    let englishToChineseDict = [ "hello": "你好", "hi": "你好" ] 

    var english : String 

    init(_ english : String) { 
    self.english = english 
    } 

    var description : String { 

    if let result = englishToChineseDict[english] { 
     return result 
    } else { 
     return "The term \(english) is not in the dictionary" 
    } 
    } 
} 


let chinese = Translate("hi") 
print(chinese) // "你好" 
+0

嗯。我正在考慮像Int(1.5)這樣的東西會得到1.我可以使用類似的方法來獲取翻譯的詞嗎?像翻譯(「嗨」)會得到「你好」 –

+0

@PakHoCheung只是快捷translator.translate你喜歡的任何方式? –

+0

但翻譯(「嗨」)不返回一個字符串,我怎麼能使它成爲字符串?有沒有什麼方法可以返回字符串而不是使用。說明 –

1

init方法是用來初始化對象的屬性,嘗試創建另一個功能及使用方法,像這樣

class Translate: NSObject { 

    struct Static { 
     static var instance: Translate? 
    } 

    class func sharedManager() -> Translate { 
     if (Static.instance == nil) 
     { 
      Static.instance = Translate() 
     } 
     return Static.instance! 
    } 

    let englishToChineseDict = [ 
     "hello": "你好", 
     "hi": "你好" 
    ] 

    func translateWord(english: String) -> String { 
     if let word = englishToChineseDict[english] { 
      return word 
     } 
     else { 
      return "Chinese word not found for english word \(english)" 
     } 
    } 
} 

現在調用此方法像這樣

let str = Translate.sharedManager().translateWord("hello") 

注:我創建了Translate類的共享(單例)對象,因此您可以訪問單例對象fr om使用sharedManager方法的任何類。所以你不需要創建Translate類的新實例。

編輯:

class Translate: NSObject { 

    let englishToChineseDict = [ 
     "hello": "你好", 
     "hi": "你好" 
    ] 

    var translatedWord = String() 
    var isTranslated = false 

    init(english: String) -> String { 
     if let word = englishToChineseDict[english] { 
      translatedWord = word 
      isTranslated = true 
     } 
    } 
} 

現在你可以這樣調用

let translate = Translate("Hello") 
if translate.isTranslate { 
    print(translate.translatedWord) 
} 
+0

@vadian現在它不會崩潰。 :) –

+0

這將是有益的解釋額外的代碼,使翻譯作爲一個單身人士 –

+1

單身人士的語法已過時:現代推薦的語法只是一行'靜態讓sharedManager =翻譯()'。它取代了'Static'結構和'sharedManager()'函數。 – vadian

相關問題