我想制作一个从韩语字母(hangul)到拉丁字母(罗马化)的音译,但似乎(在多次尝试但没有成功之后)使用简单的关联数组并不合适做。
到目前为止,这是我一直在努力的方法:
https://gist.github.com/1154969
我尝试用韩语音节替换平假名,但无法正常工作。
有没有人有办法解决吗?
我想制作一个从韩语字母(hangul)到拉丁字母(罗马化)的音译,但似乎(在多次尝试但没有成功之后)使用简单的关联数组并不合适做。
到目前为止,这是我一直在努力的方法:
https://gist.github.com/1154969
我尝试用韩语音节替换平假名,但无法正常工作。
有没有人有办法解决吗?
由于您只是想将原始字符串中的某些特定符号(韩语音节)扩展为其他预定义的序列(罗马化),请使用对象查找的组合,将韩语存储为键,将罗马化存储为值,并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
将文本罗马化很容易,但反之则相当困难。例如在日语中(我比韩语更了解),なん 写成“nan”,第一个音节是“na”,第二个音节是“n”。您的代码必须以某种方式区分这两个音节,因为如果它将第一个 n 变成 ん 而不是第二个,您的解析器将留下“an”,这是日语中不存在的音节。
解决这个问题的方法最基本的形式是关联数组。与其一次性用它们的值大量替换键,不如先寻找可能最长的音节,然后一次性替换它们。所以首先,你会选择像“shi”这样的音节,像“na”这样的音节,最后是像“n”这样的音节。如果你这样做,我所知道的所有亚洲语言都应该安全地转换回他们自己的字母表,但请记住,如果不同的音节具有相同的罗马化写作形式,这仍然可能会导致问题。