◆本地化产品的整体步骤
1.在产品起始开发文档中要明确说明,产品本地化是开发周期中的一个重要环节,不应该把本地化放到开发完成时做,这样会带来本地化居多不便;
2.本地化测试应该在产品功能稳定时立即启动, 这时候无需开发一个本地化版本,而通过伪本地化方面或Pilot-language 本地化方法来先行测试;
3. 在用户界面稳定后,其他版本的本地化工作需要马上启动;
4.在原始资源中避免表达错误,语法错误;
5. 本地化资源外包:本地化工具包有一套工具,资源文件,二进制文件,其他本地化信息,这些都提交给本地化外包公司;本地化外包公司与开发人员的联系;翻译的术语要跟软件的背景适宜
◆关于资源本地化
1. 关于字符串:
A.Avoid Run-Time Composite Strings :避免运行后动态组合字符串 |
|
When Variables Are Necessary, Use Unique Names:变量一定要用时,用唯一名称 |
|
Win32 -- FormatMessage:一般用于多变量的警告或者消息语句中 |
|
.NET Framework -- String.Format:能够处理多个变量的现实 |
|
Do Not Compound Several Variables:不要将多种类型的变量混合 |
|
Keep Sentences in a Single String:一个句子需放到一个string里面表示 |
|
Watch Your String Buffer Sizes: 考虑字符串的buffer大小 |
用例:A
char szString[] = "Are you sure you want to delete the ";
char szFinalString[cbMaxSz]= szString + szDelObject + "?";
其中,szDelObject在程序运行时,可能为:file、 directory 或 subdirectory
=>换成下面三个完整的句子, 且针对不同的语言时翻译会更好理解:
"Are you sure you want to delete the file?";
"Are you sure you want to delete the directory?";
"Are you sure you want to delete the subdirectory?";
另外, 对于单一字符串,最好针对特定的上下文环境,分别列出,如
Menu_open = "open"
Dialog_open = "open"
Button_open = "open"
因为,可能有复数,性别的不同,或者用于不同语言时单一字符会根据上下文转译。这样, 对于可能存在这种境况的单一字符,最好做到每个上下文列举一个字串。
用例:B
用例A中的句子可以用下面的结构来代替
Del_File = "Are you sure you want to delete the %s ?";
并附文档说明:%s 可能为file、 directory 或 subdirectory
另外,有多个变量时,尽量能表明变量的顺序:如
Memory_Error = "Not enough memory to %s the file %s.";
该句中有两个%s, 存在的问题:当有些动词和名词位置摆放位置不同的语言时,就会出现错位:
如芬兰语翻译后的句子为:
"Liian vähän muistia tiedoston avaamiseen FileName1."
而,芬兰语正确的句子为:
"Liian vähän muistia tiedoston FileName1 avaamiseen."
解决方面是:将两个%s 用出现的次序分别标明, 即
"Not enough memory to %1 the file %2."
这样芬兰语翻译后为:
"Liian vähän muistia tiedoston %2 %1." 容易替换对应的字符
用例:C
采用了message table
// Sample.mc
LanguageNames=(German=2:msg00002)
MessageId=1 SymbolicName=IDS_NOFILE
Language=English
Cannot open file %1.
Language=German
Die Datei %1 kann nicht geöffnet werden.
MessageId=2 SymbolicName=IDS_OTHERIMAGE
Language=English
%1 is a %2 image.