定位在静态控制中不起作用
Localisation not working in static control
我正在开发一个基于窗口的应用程序,因为它是基于窗口的桌面应用程序,我需要支持从中文到法语和从印地语(印度)到葡萄牙语(巴西)的多种语言,现在认为工作得很好,仍然有相同大小的文本用于显示。但对于以下示例,
如果我的一个静态控件包含以下文本
选择输出范围 |_文本框__|
由于我正在用英语开发它,因此根据英语文本大小考虑静态大小。认为工作很棒。
现在我把上面的静态控制转换成中文视图的相同文字如下:
选择输出范围 |_文本框__|
我很高兴中文的大小小于英文的大小,但是当我将相同的文本从英语转换为法语时,以下是静态控制的大小,
Sélectionnez Plage de sortie|_文本框__|
我的错误文本大小增加了一些世界,因为我们在较小大小的文本上有大文本,文本视图将像以下方式一样剪裁,
选择输出范围 |_文本框__|
塞莱西翁内斯海滩 |_文本框__|
在法语中文本大小是增加的,那么如何在语法上处理文本大小的不匹配呢?
有不同的方法可以处理这个问题。答案取决于您在代码中处理本地化的方式。
请注意,一些当地人需要从左到右颠倒显示 ->从右到左(阿拉伯语...在这种情况下,您必须处理以下情况:
Select Output Range |_Text Box__|
必须成为:
|_Text Box__| <translated text into arabic or hebrew>
因此,您必须意识到,翻译对话框不仅仅是翻译标签。您已经开始注意到这一点,因为标签长度不同。
如果您选择使用非常简单的本地化机制,例如为每种语言提供一个文本文件(包含所有标签的列表),那么除了尝试使用一种适合所有语言的标签大小之外,您不能做更多的事情。对话框在某些语言中看起来不是很好。而且您将无法使用从右到左的语言。这是快速而肮脏的方式。
如果要更进一步,最常见的方法是为每种语言提供一个资源文件。当程序几乎完成时,您必须复制资源文件。每种语言都有一份副本。您可以本地化整个对话框、菜单等。将对话框本地化为法语时,可以使标签字段变大。对于中国人来说更小。如果需要,还可以更改阿拉伯语的对话框布局。当然,您必须为每种语言构建一个软件版本。
您的帖子具有 MFC 标签,因此我想您可能对 MFC 扩展 DLL 感兴趣。这是 MFC 应用处理本地化的标准方法。创建一个仅包含资源文件的 DLL。如果支持 10 种语言,则复制和翻译 10 个资源文件,并创建 10 个扩展 DLL。MFC 根据当前的 Windows 区域设置自动加载正确的 DLL。有关代码项目的示例,请参阅示例
我不建议您编写一些在创建对话框时自动移动控件并调整控件大小的代码,因为这并不像看起来那么容易。除非你的应用程序非常简单。
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- C++ 对象数组字符串输入在控制台上不起作用
- 无法在控制面板中创建轨道栏.示例代码不起作用
- 旋转控制不起作用
- 静态控制滚动条不起作用 Win32
- Xcode 5 带有 %s 格式说明符的 LLVM printf 在调试控制台中不起作用
- 定位在静态控制中不起作用