# MultiLanguage
**Repository Path**: PyZhang/MultiLanguage
## Basic Information
- **Project Name**: MultiLanguage
- **Description**: 在C++平台上实现通用的多语言功能模块
- **Primary Language**: C++
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 7
- **Created**: 2017-03-18
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
MultiLanguage
==============================
What it is ?
------------
MultiLanguage 是一个用 C++ 实现的多语言模块。它从多语言文件中读取词条,并在软件运行时进行翻译。
###特性
- **易于新增语言**
新增一门语言LANG,只需要复制一份 language\_xx.txt,并重命名为: language\_LANG.txt
然后,在程序里调用 `set_langauge("LANG")`,即可
- **支持任意特殊字符**
在多语言文件中,可以用 \xNN 在代表任意字符。比如:\x0a --> 换行符,\x41 --> 'A'
- **支持域**
词条同名表示不同的意思可以用域的方式进行区分
比如:对话框A中的"M"要翻译成"中等",而对话框B的"M"则要翻译成"男性"。域可以很好地区分它们,避免冲突。
- **域继承**
大多数词条都能在 DomainA 中被合理翻译,但是有个别需要特殊翻译。难道要建一个 DomainB ,将 DomainA 中所有词条复制到 DomainA?如果词条上万条,将来如何维护?
当 DomainB 继承于 DomainA ,在翻译 DomainB 的词条时,先从 DomainB 域中寻到,如果没找到便会到 DomainA 去找。
- **支持逆翻译**
当A --> aa,那么逆翻译则是:aa --> A。
- **易于调试**
在研发阶段,该调试功能能在词条翻译不成功时添加异常提示,使我们更容易地发展并解决翻译问题。
如:如果词条 "Yes" 没有找到相应的翻译,那么它则会返回 "!Yes!"。如果词条 "Yes" 有翻译,但翻译结果为空值,那么返回 "?Yes?"。
在产品发布阶段,可以关闭调试功能。如果词条"OK",说算是没有被正确地翻译,翻译工具也返回"OK"
###文件格式
- K-V 格式
- XML 格式(预留接口,尚未实现)
#### K-V 格式
如下:
[A]
OK=好的
ERROR=错误
M=中端
[B:A]
M=男性 # 这里翻译不一样
(code-1)
用方括号包括起来的表示以下都是该域的词条,比如:[A]
每个词条的格式都是:K=V,以等号分隔
**支持注释:用 # 号表示行后面的都是注释**
[B:A],表示定义一个域 "B",它继承于域 "A"
#### XML 格式
(尚未定义)
###依赖
- boost库
假定 boost库 安装在 /usr/local/boost 目录下。
库依赖:libboost\_system.so, libboost\_filesystem.so
###编译安装
####准备工作
假设你已在本地安装了 boost 库,安装路径为: "/usr/local/boost"
若没有安装到该路径下,请用:`ln -s your-boost-path /usr/local/boost` 创建符号链接。
当然,GCC 与 make 工具这是必备的。
本人使用的GCC版本信息:
gcc version 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
####下载编译
你可以下载zip包到本地进行解压,或 `git clone` 到本地。
cd MultiLanguage
make && sudo make install
####运行测试
make test
测试中,我们会看到有些错误,不必惊慌,那是目前尚未完成的功能。
原本打算支持XML与K-V两种格式,但目前只实现了K-V格式,而XML格式的已编写了测试用例,但尚未实现。
只要实现一种就够用了。
###集成运用
####C++
(TODO)
####C
(TODO)
问题反馈
--------
如果大家在使用过程中发现问题,欢迎讨论并提出宝贵的意见!
本人联系方式如下:
- 博客:
- QQ: 527020730
- E-Mail: hevake\_lcj@126.com