2011-09-16 55 views
5

假設我有一個句子,我正在根據從其他人傳入的數據動態生成一個句子。假設這是一個食品列表,如:["apples", "pears", "oranges"]["bread", "meat"]。我想採取這些句子,形成一句話:「我喜歡吃蘋果,梨和橙子」和「我喜歡吃麪包和肉。」如何使用動態數量的連詞本地化句子?

這對於英語來說很容易,但我相當肯定連詞在所有語言中都不以相同的方式工作(事實上我敢打賭,其中一些是完全不同的)。你如何以一種動態數量的項目本地化一個句子,並以某種方式加入?

如果有幫助,我正在爲Android做這個工作,所以你可以使用它提供的任何庫(或一個用於Java的)。

+0

我不確定我是否正確理解你想要做什麼,但是如果你的目的是讓用戶使用受控詞彙在某種語言中構建句法正確的句子,那麼這個任務不是那麼容易 - 甚至不是爲英語。你可能想看看[Attempto Controlled English](http://en.wikipedia.org/wiki/Attempto_Controlled_English)。如果你還想確保句子在語義上是正確的(即避免「我喜歡吃肉和書籍」,那麼它就更加困難了。 – MarcoS

回答

0

問題當然是知道其他語言。我不知道如何準確地做到這一點,而無需爲目標語言找到母語人士。谷歌翻譯是一種選擇,但你仍然應該有一個說這種語言的人對它進行校對。

Android在Plurals字符串資源中具有此內置功能。 他們的文檔提供英語(res/valules/strings.xml)的例子,也用另一種語言(放在res/values-pl/strings.xml

有效量:{zero, one, two, few, many, other}

他們的榜樣:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <plurals name="numberOfSongsAvailable"> 
     <item quantity="one">One song found.</item> 
     <item quantity="other">%d songs found.</item> 
    </plurals> 
</resources> 

所以它看起來像他們的方法是使用更長的句子片段而不僅僅是單個單詞和複數。

1

我會問母語爲你想要定位的語言。如果所有的語言都使用相同的結構(除了最後一個元素之外的所有元素之間的逗號),那麼只需構建一個逗號分隔的n - 1元素列表,並使用外部化模式並使用java.util.MessageFormat來構建整個句子第n-1個元素字符串作爲第一個參數,第n個元素作爲第二個參數。您也可以將分隔符(英文逗號)外化,以便在需要時使其更加靈活。

如果某些語言使用另一個構造,則定義幾個Strategy實現,將策略的名稱外化以便知道給定語言環境使用哪種策略,然後請求適當的策略爲您設置列表的格式。英語策略將使用上述算法。另一種語言的策略會使用將元素連接在一起的不同方式,但如果這些語言使用相同的構造但使用不同的詞語,則可以使用外部化模式將其重用於多種語言。

請注意,這是因爲它是如此困難,大多數程序只是做我喜歡的名單:麪包,肉

0

非常困難。以法語爲例:它使用每個名詞前面的文章。你的例子是:

潔妹馬槽DES POMMES, poires等DES橘子。

或者更好:

潔妹 POMMES, poires等橘子。

(字面上:我喜歡蘋果,梨和橘子)。

所以它不再只是連詞的問題。這是一個超越連詞的不同語法規則。不用說其他語言可能會引發完全不同的問題。

+0

麪包和肉變得更有趣:J'aime ** le **痛苦et ** la ** viande。 –

0

這很遺憾幾乎不可能做到。那是因爲一方面是共同的,另一方面是因性別而異的形式。英語沒有這種區別,但是其他語言很多(大多數?)。更糟糕的是,動詞形式可能取決於以下名詞(既有性別依賴形式又有共軛)。

而是這樣漂亮的句子,我們往往會使用的東西列出,例如:

我喜歡吃的東西的清單:
蘋果

橘子

恐怕這是唯一合理的事情要做(變量,可修改的列表)。