问题标签 [boost-locale]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 为 gettext 提升语言环境“转换失败”
我遇到了这样的例外:std::runtime_error("Conversion failed")
仅当我在翻译中使用非 ascii 字符时才会出现问题。
我的文件中的示例内容.mo
(命令msgunfmt foo.mo
:)
c++ - 为什么 boost::locale::to_title 没有返回预期的输出?
所以我已经找到了如何在 C++ 字符串中大写单词?,但我尝试了与建议的类似代码,包括 Boost::locale 示例中提供的代码。我还将包括我的代码当前是什么以及预期和实际输出是什么。所以我试图理解为什么我没有得到预期的输出。
代码
预期产出
实际输出
附加信息
- 操作系统:Windows 10 家庭版 64 位
- 编译器:Microsoft Visual Studio 15.8.0
- 平台:x64
- 非默认编译选项:
/std:c++latest
- 提升版本:106700
编辑#1
似乎 vcpkg 安装的 Boost 没有使用 ICU 编译,这显然是boost::locale::to_title
正常运行所必需的。
c++ - 由于 Ubuntu 18.04 上的 libicu 链接错误,无法静态链接 boost-locale
以下代码:
使用以下标志构建:
链接失败,出现以下错误:
我正在使用 Ubuntu 18.04,两者都libboost-all-dev
安装libicu-dev
在 Ubuntu 存储库中。我可能缺少使其链接在一起所需的一些琐碎的组件/标志/库,但我无法找到它。
c++ - 对 boost::locale 关于“ß”大写的异常行为感到困惑
我正在尝试使用该boost::locale
库在我的代码(版本 1.71)中执行字符串的大写和小写转换。
我对“ß”的大写有疑问。为了符合我的代码库中已经存在的单元测试,我希望将字母“ß”大写为“SS”。这应该不是问题,因为据我了解这是预期的行为(https://www.boost.org/doc/libs/1_71_0/libs/locale/doc/html/conversions.html)。
这是此页面上提供的示例的副本以供参考:
Upper GRÜSSEN
Lower grüßen
Title Grüßen
Fold grüssen
但是,当我在代码中使用该方法时,情况并非如此。应用大写方法时,“ß”保持为“ß”。
boost::locale
我很困惑,在库源中找到了以下示例:
我尝试编译它,这是我得到的结果:
强调部分:
我真的不明白这句话是怎么回事。实际的预期行为是什么?
string - Boot.Locale 的“线性/连续文本块”是什么意思?
我阅读 Boost.Locale: Design Rationale并且有章节Why most parts of Boost.Locale work only on linear/contiguous chunks of text
,linear/contiguous chunks of text
在这种情况下意味着什么?
c++ - 带有 boost::locale::normalize 的 bad_cast 错误
我正在尝试将包含以utf编码的txt文件内容的字符串转换为unicode字符串,使用boost并在此之后对其进行规范化。不幸的是,我得到了 bad_cast 错误。任何人都可以帮忙吗?代码:
c++ - 为什么 boost::locale::date_time 中的 std::bad_cast 异常适用于全局对象而不是本地对象?
我在使用 boost::locale::date_time 库编写包装类时遇到问题。具体来说,我无法从我的班级创建一个全局对象,尽管除此之外一切正常。
这是相关的示例代码:
正如您在代码中看到的,我使用静态成员来确保在第一次创建 DateTimeWrapper 对象时初始化全局语言环境。通常,这可以防止在我创建 boost::locale::date_time 成员时引发 std::bad_cast 异常。但是,当创建的第一个 DateTimeWrapper 对象是全局实例时,我仍然从该行收到异常。
请注意,通过调试器,我可以确认 Init_Global_Locale() 方法中的所有行都在构建全局对象期间运行。此示例代码还在同一个源文件中声明 global_date_time_object 之前声明了 DateTimeWrapper::m_Global_Locale_Initialized,因此我知道这里的初始化顺序不是问题(无论如何通过调试器进行确认)。
那么为什么代码适用于本地对象而不适用于全局对象,即使我可以看到所有代码行都以正确的顺序运行,对于两个版本?
c++ - 如何使用 Boost.Locale 和 Boost.Predef 解决 C++WinRT 项目中的 vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker 不匹配问题?
我正在开发一个 C++/WinRT 项目,并希望在其中使用 Boost (1.73.0) 语言环境。受Microsoft 博客文章的启发,我已经替换了对库源中不受支持的 WinApi 函数的调用,并使用windows-api=store
. 我设法构建了所有预期的库变体(arm / x64,debug / release)并继续构建 UWP 应用程序。这就是我现在卡住的地方。构建无法与以下输出链接:
vccorlibd.lib(init.obj):错误 LNK2038:检测到“vccorlib_lib_should_be_specified_before_msvcrt_lib_to_linker”不匹配:值“1”与 MSVCRTD.lib(app_appinit.obj) 中的值“0”不匹配
vccorlibd.lib(init.obj):错误 LNK2005:__crtWinrtInitType 已在 MSVCRTD.lib(app_appinit.obj) 中定义
触发失败的行:
我的设置是 Visual Studio 17 和 19,SDK 10.0.19041.0。我已经尝试过针对类似问题提出的解决方案,但无济于事。我在boost_1_73_0/libs/locale/src/win32目录中所做的修改如下:
api.h
lcid.cpp
更新
我发现,这个问题实际上是由包含<boost/predef.h>
在api.h中引起的,我在适当的时候用它来定义BOOST_PLAT_WINDOWS_RUNTIME
宏。但是,我仍然不知道如何处理这种情况。有人可以指点我的地方吗?谢谢你。
boost - cmake, boost locale 和一个静态库
我有两个应用程序和一个两者都使用的静态库。
这三个都使用 CMake 作为构建系统。
我想本地化我的应用程序。
我或多或少了解如何本地化应用程序,但我不确定我应该如何本地化我的静态库。
如果它是一个动态库,我可以将编译后的翻译与二进制文件一起安装并访问它们。
但是静态库只与开发人员相关。最终产品中不再有库。我会以某种方式需要将库的编译翻译传输到应用程序。
当为我的一个应用程序调用 make install 时,我的静态库的翻译也需要安装。
如何使用 CMake 实现这样的目标?