2015-10-28 81 views
-1

更新:修正參數錯誤,通過對ELSIF消除elsif input.include? != false,並更換elsif input == false使翻譯能翻譯一個以上的語言

UPDATE2:代碼工作完美,翻譯準確,並給出準確的翻譯短語(詞組)

require 'yaml' 

def translate 
    translations = YAML.load_file 'spanish.yml' 

    puts "Enter word or phrase to be translated to English, press 'Q' to quit:" 
    input = gets.chomp 
    case 
    when translations[input] 
     puts "The translation to English is: #{translations[input]}" 
    when input =~ /q/i 
     exit 
    else 
     puts "Invalid word or phrase redirecting..." 
     translate 
    end 
end 
translate 

有沒有一種方法,我可以做翻譯也能夠從俄羅斯翻譯?這裏是俄羅斯YAML文件:

и: and, though 
в: in, at 
не: not 
он: he 
на: on, it, at, to 
я: I 
что: what, that, why 
тот: that 
быть: to be 
с: with and, from, of 
а: while, and, but 
весь: all, everything 
это: that, this, it 
как: how, what, as, like 

我會做同樣的事情,從西班牙語翻譯,但不是加載西班牙我將加載russian.yaml否則我將不得不作出另一種定義,如:

def russian_translate 
    translations = YAML.load_file 'russian.yml' 
    puts "Please enter the phrase to translate" 
    etc... 
+0

不確定你的意思是'input.include? != false',但是'include?'需要一個參數。 –

+0

@Sergio Tulentsev你介意再詳細一點嗎?我可以做'.include?(false)'把它作爲不存在的返回嗎? – 13aal

+0

@SergioTulentsev這應該是一個新的運營語法,將在Ruby3介紹:?!'=',意思是「不知道這是否等於」 :) – mudasobwa

回答

1

首先,可能不應該在文本文件中使用Ruby語法編寫散列。 Ruby傢伙在通常使用YAML爲:

es_en.yml:

a: to 
abajo: down 
el_abanico: fan 

那麼人們可能會將此文件加載到一個哈希:

require 'yaml' 
translations = YAML.load_file 'es_en.yml' 
#⇒ { 
# "a" => "to" 
# "abajo" => "down" 
# "el_abanico" => "fan" 
# } 

它的時間現在處理input

input = gets.chomp 
case 
when translations[input] 
    puts "The translation is: #{translations[input]}" 
when input =~ /^q$/i # input is a single 「q」 letter 
    exit 
else "Translation not found" 
end 

您可能希望把這個循環。

+0

只是想知道:爲什麼你會使用正則表達式匹配單個字母q,而不是簡單地'input =='q''?在可讀性方面更糟(因此需要評論)。有什麼優勢? – Mischa

+0

@Mischa因爲這樣對字母拼寫無關緊要,你也可以這樣做: '當輸入=〜/ q/i'時 這樣可以讓它們放入「q」或「Q」 – 13aal

+0

這不是使用YAML的「ruby guys」,任何人都想要一個可以被多種語言重複使用的對象/數據的易讀,序列化表示。 「ruby guys」就像「python球員」,「perl球員」或「java球員」那樣。 –