我们正在努力优化我们的本地化测试。
我们的QA小组建议使用一种特殊模式来强制资源中的所有字符串完全包含在X中。我们已经API劫持LoadString,以及它的MFC实现,所以这样做不应该是一个主要障碍。
我的问题是你如何解决格式问题?
Examples -
CString str ;
str . LoadString ( IDS_MYSTRING ) ;
where IDS_MYSTRING is "Hello World", should return "XXXXX XXXXX"
where IDS_MYSTRING is "Hello\nWorld", should return "XXXXX\nXXXXX"
where IDS_MYSTRING is "Hello%dWorld", should return "XXXXX%dXXXXX"
where IDS_MYSTRING is "Hello%.2fWorld", should return "XXXXX%.2fXXXXX"
where IDS_MYSTRING is "Hello%%World", should return "XXXXX%%XXXXX"
总而言之,如果在printf或Format语句中使用该字符串应该有效,它应该遵循转义字符。
所以这是一个纯粹的代码问题,C ++ / MFC,
CString ConvertStringToXXXX ( const CString& aSource )
{
CString lResult = aSource ;
// Insert your code here
return lResult ;
}
我知道这可以使用.RC文件上的工具来完成,但是我们想要构建英语,然后像这样运行 -
申请-L10NTEST
答案 0 :(得分:3)
如果这种方法是在应用程序中突出显示格式化字符串(或格式序列)(即除XXXX以外的所有文本),您可以找到转义序列(可能使用正则表达式)并在格式化(替换)周围插入块引号价值,例如一些\ ntext - >一些[\ n]的文本
您获得可读性(所有字符串都可能很难使用应用程序)并且还可以检测非资源(硬编码)字符串。
话虽如此,如果你想要检测非资源加载的字符串(硬编码字符串),而不是替换X,为什么不只是字符串的前缀?您可以轻松地从硬编码字符串中轻松地告知资源加载的字符串,
例如
一些\ ntext - > [EN]一些\ NTEXT
希望有帮助吗?
答案 1 :(得分:1)
appTranslator的伪本地化功能可以帮助您:它修改未翻译的字符串以使用变音符号,文本扩展或缩短等。到目前为止,你并不感兴趣。它变得有趣的地方在于它可选地将这些字符串括在括号中。这个想法是为了让字符串伪本地化更明显。您可以使用它来检测字符串实际来自字符串表而不是代码。
当然,由于伪本地化程序必须正常运行,因此appTranslator会保留所有格式化程序(包括类似printf和FormatMessage的格式化程序)和特殊字符,例如%或\ n。这就是你要找的。 p>
您甚至不需要修改代码:只需创建一个“虚拟”翻译。通过'虚拟',我的意思是您不打算翻译您的应用程序的语言。将应用的语言首选项设置为该语言。 等等,甚至更好:QA的人可以完全靠自己完成。他们甚至不用打扰你! : - )
免责声明:我是appTranslator的作者。
编辑:回答你的评论: 很高兴看到你已经使用appTranslator。 为了避免由于L10N DLL中没有的对话框或字符串引起的问题,您可以简单地重新构建DLL(例如,使用VS项目中的后链接步骤)。该过程自动重新扫描源exe并在构建的资源dll中合并新的和修改的文本(不影响appTranslator项目文件,而不是'Update Source')。这有助于确保您的资源DLL始终与您的exe同步。
答案 2 :(得分:0)
您可以在此处应用编译器理论,并使用flex/bison(lex / yacc或其他任何工具)生成扫描仪和解析器。您可以将\ w +定义为单词,它可以匹配“Hello”和“World”等。
答案 3 :(得分:0)
如果您的软件支持区域设置,我认为您需要的是XXXX区域设置。
您使用英语进行开发,然后切换到XXXX语言环境以确保所有内容都可以翻译。
答案 4 :(得分:0)
我的最终解决方案是为字符串添加前缀,如“* [resource instance name] original string”。它运作得非常好,它显示了可能不符合德语的字符串。
示例:
来自appres.dll的原始字符串,“我的应用程序”
来自appres.dll的新字符串,“* [appres]我的应用程序”。
感谢所有建议。
答案 5 :(得分:0)
我更喜欢我在微软进行伪本地化时使用的机制,其中包括在每个本地化资源周围添加大括号。资源=> [ - 资源 - ],例如。然后你总是可以告诉你有一个组合字符串,并且通常不会改变格式,禁止换行规则。
我们通常还会进行一些字符串扩展(在原始字符串周围添加各种字符),以及一些基于字典或随机化的字符替换(将“o”转换为“ö”)。
有些团队还将文字资源标识符(名称)作为本地化资源的值,这对于本地化人员比对测试人员更有用,因为他们可以看到资源在UI中实际使用的位置。