2

我想制作一个从韩语字母(hangul)到拉丁字母(罗马化)的音译,但似乎(在多次尝试但没有成功之后)使用简单的关联数组并不合适做。

到目前为止,这是我一直在努力的方法:

https://gist.github.com/1154969

我尝试用韩语音节替换平假名,但无法正常工作。

有没有人有办法解决吗?

4

2 回答 2

0

由于您只是想将原始字符串中的某些特定符号(韩语音节)扩展为其他预定义的序列(罗马化),请使用对象查找的组合,将韩语存储为键,将罗马化存储为值,并String.replace具有生成替换的能力通过函数。

我将使用片假名作为示例的一部分,因为我也更了解日语 :) 但您只需要用正确的韩文填充替换表即可使其工作:

var hangul_syllable_to_roman = {
    '가' : 'ga',
    '강' : 'gang',
    'カ' : 'ka',
    'タ' : 'ta',
    'ナ' : 'na'
}

function one_hangul_syllable_to_roman(syllable) {
    var roman = hangul_syllable_to_roman[syllable]
    // if we have suitable replacement - do it, if not - just return original back
    if (roman) { return roman } else { return syllable }
}

function hangul_to_roman(hangul) {
    return hangul.replace(/./gm, one_hangul_syllable_to_roman)
}

document.write(hangul_to_roman('가강 カタカナ some other text'))
// gagang katakana some other text
于 2013-10-23T16:03:17.960 回答
0

将文本罗马化很容易,但反之则相当困难。例如在日语中(我比韩语更了解),なん 写成“nan”,第一个音节是“na”,第二个音节是“n”。您的代码必须以某种方式区分这两个音节,因为如果它将第一个 n 变成 ん 而不是第二个,您的解析器将留下“an”,这是日语中不存在的音节。

解决这个问题的方法最基本的形式是关联数组。与其一次性用它们的值大量替换键,不如先寻找可能最长的音节,然后一次性替换它们。所以首先,你会选择像“shi”这样的音节,像“na”这样的音节,最后是像“n”这样的音节。如果你这样做,我所知道的所有亚洲语言都应该安全地转换回他们自己的字母表,但请记住,如果不同的音节具有相同的罗马化写作形式,这仍然可能会导致问题。

于 2013-10-23T15:25:01.280 回答