2016-08-15 79 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

相关问题