代码之家  ›  专栏  ›  技术社区  ›  titanae

本地化测试,用XXXXX格式化所有字符串

  •  3
  • titanae  · 技术社区  · 17 年前

    我们正试图优化我们的本地化测试。

    我们的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文件,但我们想构建英语,然后这样运行-

    应用程序-L10NEST

    6 回复  |  直到 17 年前
        1
  •  3
  •   RobS    17 年前

    如果这种方法是突出显示应用程序中的格式化字符串(或格式序列)(即XXXX以外的所有文本),您可以定位转义序列(可能使用正则表达式),并在格式化(替换)值周围插入块引号,
    例如,Some\ntext->一些文本

    您可以获得可读性(XXX的所有字符串可能很难使用应用程序),还可以检测非资源(硬编码)字符串。

    话虽如此,如果你想检测非资源加载的字符串(硬编码字符串),而不是替换Xs,为什么不直接在字符串前加前缀呢?您将能够轻松区分资源加载的字符串和硬编码的字符串,
    例如,Some\ntext->[EN]部分内容

    希望有帮助?

        2
  •  1
  •   Serge Wautier    16 年前

    伪定位特征 appTranslator 它可以帮助你:它修改未翻译的字符串以使用变音符号、文本加宽或缩短等。到目前为止,你还不感兴趣。有趣的是,它可以选择将这些字符串括在括号中。这个想法是为了更明显地表明字符串是伪本地化的。您可以使用它来检测字符串实际上来自字符串表而不是代码。

    当然,由于伪本地化程序必须正常运行,appTranslator会保留所有格式化程序(包括类似printf和FormatMessage的格式化程序)和特殊字符,如%或\n。这正是您要查找的。

    你甚至不必修改你的代码:只需创建一个“虚拟”翻译。我所说的“虚拟”是指一种你不打算将你的应用程序翻译成的语言。将应用程序的语言首选项设置为该语言。 等等,这甚至更好:QA的人可以完全靠自己完成。他们甚至不必打扰你! :-)

    免责声明:我是appTranslator的作者。

    编辑:回复您的评论: 很高兴看到你已经在使用appTranslator了。 为了避免由于L10N DLL中没有的对话框或字符串引起的问题,您可以简单地重新构建DLL(例如,在VS项目中使用后链接步骤)。该过程会自动重新扫描源exe,并在构建的资源dll中合并新的和修改的文本(不影响appTranslator项目文件,而不是“更新源”)。这有助于确保资源DLL始终与exe同步。

        3
  •  0
  •   Eugene Yokota    17 年前

    您可以在此处应用编译器理论,并使用以下命令生成扫描程序和解析器 flex/bison (lex/yacc或任何工具)。您可以将\w+定义为单词,它可以匹配“Hello”和“World”等。。

        4
  •  0
  •   Osama Al-Maadeed    17 年前

    如果你的软件支持区域设置,我认为你需要的是XXXX区域设置。

    您用英语开发它,然后切换到XXXX语言环境以确保所有内容都是可翻译的。

        5
  •  0
  •   titanae    17 年前

    我的最终解决方案是在字符串前加上前缀,如“*[资源实例名称]原始字符串”。它运行得很好,它显示了可能不适合德语的字符串。

    例子:

    来自appess.dll的原始字符串,“我的应用程序”

    来自appess.dll的新字符串,“*[appes]我的应用程序”。

    谢谢你的建议。

        6
  •  0
  •   JasonTrue    16 年前

    我更喜欢我在微软时使用的伪本地化机制,即在每个本地化资源周围加上括号。资源=>例如,[-资源-]。然后,你总是可以看出你有一个组合字符串,除非有换行规则,否则格式通常不会改变。

    我们通常还会进行一些字符串扩展(在原始字符串周围添加各种字符),以及一些基于字典或随机化的字符替换(将“o”转换为“”)。

    一些团队还将文字资源标识符(名称)作为本地化资源的值,这对本地化人员比测试人员更有用,因为他们可以看到资源在UI中的实际使用位置。

    推荐文章