2016-08-15 2 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ファイルを見つけることができます。設定を返しますNSLocalizedString("Settings", comment: "")を呼び出し、繁体字中国語ファイル内

"Settings" = "設定"; 

はあなたのような何かを書く場合。

詳細については、thisまたはthisを確認してください。

+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

Um。私はInt(1.5)のようなものについて考えています。私は翻訳された単語を得るために同様の方法を使用できますか?あなたの好きなようにtranslate( "hi")のように "你好" –

+0

@PakHoCheungちょうどショートカットtranslator.translate? –

+0

しかし、Translate( "hi")は文字列を返しません。どのように文字列に変換できますか?使用する代わりにStringとして返す方法はありますか?description –

1

initメソッドは、オブジェクトのプロパティを初期化するために使用され、今、この

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

ノートのように、このメソッドを呼び出す別の関数を作成しようと、この

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)" 
     } 
    } 
} 

のようなものを使用します:私は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

Translateをシングルトンとして動作させるための追加コードについて説明すると役に立ちます。 –

+1

シングルトンの構文が古くなっています:最新の推奨構文は 'static let sharedManager = Translate()'です。これは 'Static'構造体と' sharedManager() '関数を置き換えます。 – vadian

関連する問題