代码之家  ›  专栏  ›  技术社区  ›  Ravi shankar

在win32 API应用程序中实现全球化/多语言功能

  •  8
  • Ravi shankar  · 技术社区  · 16 年前

    我已经用visual C++开发了一个窗口应用程序(Win32 API)。我必须在这个应用程序中添加多语言功能。有人能指导我如何推进这项任务吗。

    4 回复  |  直到 16 年前
        1
  •  5
  •   Motti    13 年前

    Windows上多语言应用程序的基础是使用“资源”。资源是附加在可执行文件末尾的块,它只包含数据,并且以非常特定的方式格式化,以便Windows能够解释这些数据。

    每个资源(对话框、对话框、模板、版本信息、字符串表等)都包含一个可以更改的语言标识符。您可以使用不同的语言标识符多次创建同一资源。编译后,当应用程序由Windows加载时,它将尝试打开哪种语言更接近Windows UI语言的资源。

    resources chapter .

    现在,每次在代码中使用字符串时,将其放入字符串表资源中,并使用LoadString函数进行检索。只要在资源中设置了正确的语言标识符,窗口和对话框通常会以正确的语言加载,而不需要任何特定的函数调用。

        2
  •  2
  •   Mihai Nita    11 年前

    1. 将应用程序本地化(翻译),使其“说”另一种语言
    2. 使用区域设置感知行为,您必须对日期/时间/数字进行排序或格式化

    也许最好从这里开始: http://msdn.microsoft.com/en-us/goglobal/bb978454.aspx ,尤其是右边的教程和演示文稿。

    http://mihai-nita.net/2007/05/03/how-to-localize-an-rc-file/

    对于区域设置感知行为,您必须使用特殊的API,如GetNumberFormat或GetDateFormat。 你或许可以从这里开始 http://msdn.microsoft.com/en-us/library/dd319078%28VS.85%29.aspx 或者在这里 http://msdn.microsoft.com/en-us/goglobal/dd565826.aspx

    但当然,这里没有足够的答案,因为关于这个话题有很多书。 所以,从微软全球化门户网站开始吧( http://msdn.microsoft.com/en-us/goglobal/ ),尤其是“学习”选项卡,从那里开始。

    当你遇到一些麻烦时(你很可能会遇到),请访问microsoft.com.public.win32.programmer.international新闻组(我知道,把某人从stackoverflow中带走可能不是“好方法”,但有一个专门的地方,所以你可能会得到更好的答案)。

        3
  •  1
  •   Philippe F    16 年前

        4
  •  0
  •   user203046    16 年前

    是一个大问题,还是一个小问题,取决于你的程序做什么。

    1. 字符串和字符编码。将字符串放入资源(或使用gettext)是一个开始,但您可能需要考虑如何在内部存储字符串;例如,如果你还没有使用像UTF-16这样的Unicode编码,可以考虑一下。

    2. here .

    3. 日期和时间输出格式、货币输出格式和其他内容也取决于文化。

    4. 最后,根据您使用的界面技术,您可能需要重新布局UI元素。不同系统字体的不同语言中的字符串更长更短。在极端情况下,您可能需要考虑从右向左阅读器的布局。