问题标签 [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++ - Boost.Locale - C++ 中的 Unicode 字符串
我可以使用 Boost.Locale 使我的应用程序中的所有 std::string 都支持 Unicode 吗?阅读文档后,我可以说是。但我不明白它是如何工作的。主要问题是我还能使用 boost 字符串算法库或 Boost.Lexical_Cast 库吗?如果是,为什么我需要boost::locale::to_upper和类似的格式方法,如果我在 boost 字符串算法库中有这些方法。
c++ - 与 boost::locale 一起使用时,std::isalpha 会抛出 bad_cast
我在 Debian 7 GNU/Linux(GCC 版本为 4.6.3-1)上使用 boost::locale (1.49) 时遇到了一些麻烦。代码保存在cp1251中。使用诸如“isalpha”(或“boost::algorithm::is_alpha”)之类的函数会导致异常(bad_cast)。看起来这个检查没有合适的方面。这是代码:
它在装有 Visual Studio 2008 的 Windows 7 上毫无例外地运行。但是,仍然存在一个问题:在这种情况下,“debug500”设置为 false。仅当像这样生成语言环境时它才能正常工作:std::locale loc(".1251")
. 但是当 locale 由 boost: 生成时,也会出现同样的问题std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
。如果有人能解释代码有什么问题和/或我如何使用 boost 和 std 和 cp1251 语言环境进行类似的检查(isalpha),我将不胜感激。
c++ - boost::locale to_utf function for string encoding, likes to throw
I'm having trouble using boost to convert between different string encoding. After reading this, I tried doing this:
But it always fails with a std::bad_cast when it tries use_facet() inside to_utf.
This would suggest that the boost locale::info facet isn't available for the locale being generated. But I tried a few different generations with no luck, and I expect the system default to always work, so I must be doing something wrong else where.
Any ideas?
c++ - 你可以在 boost::locale 中使用多个消息域吗?
我有许多共享许多通用库的应用程序。我正在尝试使用 boost::locale 将我的应用程序国际化。我很容易为每个通用库和每个特定应用程序创建一个单独的 .mo 文件。如果可以同时使用这样的多个消息域,我正在徘徊:
我期待 boost::locale 在 lib1.mo 和 lib2.mo 中都进行搜索,但这似乎不起作用。仅找到来自添加的第一个域的消息,在本例中来自 lib1.mo。如果我在 lib1 之前添加 lib2,则只能找到来自 lib2 的消息。
我知道您可以像这样在调用中明确使用域:
这确实有效,但我想避免为每个调用指定域。我也不确定这是否适用于使用 xgettext 提取字符串。
我想做的事有可能吗?我错过了什么吗?
如果您知道,请提出任何替代方案。
我使用 msvc 9.0 (2008) 和 boost 1.48。
c++ - 提升语言环境的特定于语言环境的 to_lower 问题
我正在尝试使用 boost::locale::to_upper 根据 boost-locale 页面http://www.boost.org/doc/libs/1_50_0/libs/locale/doc/html进行特定于区域设置的大写/conversions.html
文本表明我应该能够在 'grüßEN' 上使用 boost::locale::to_upper 并得到结果 'GRÜSSEN' - 这是正确的特定于语言环境的大写版本(所以我相信)。
在我的测试版本中,我得到的是“GRÜßEN”而不是“GRÜSSEN”。
我的测试代码看起来像这样(我使用 utf8cpp 来检查我的字符串实际上是 utf8):
这是在使用 Xcode (4.1) 的 OSX (10.7.4) 上。我已经使用 -DU_USING_ICU_NAMESPACE=0 -DU_CHARSET_IS_UTF8=1 的建议选项安装了 ICU (49_1_2)。ICU 位于 /usr/local/include/unicode 中,库位于 /usr/local/lib/libicu*.*
我从 1_48 套件中构建了 boost::locale,如下所示:
并在构建时报告:
根据https://svn.boost.org/trac/boost/ticket/6424,可以忽略警告(或者有人知道吗?)我将构建的库从 stage/libs 复制到 /usr/local/libs。
据我所知,它是针对 ICU 正确构建的。我的测试代码确实需要我链接到 libiconv - 我会认为这不是必需的,因为我在构建中关闭了图标?
谁能让我深入了解正在发生的事情/我做错了什么以及为什么我没有得到记录的预期行为 - 或者至少有一些事情可以尝试?
干杯
克里斯
c++ - 如何以特定于语言环境的方式格式化不完整的日期和时间
如何以特定于语言环境的方式格式化不完整的日期和/或时间?
我有一个日期/时间存储在一组 7 个字符串中:
dayOfWeek
- 星期几。([1,7])dayOfMonth
- 一个月中的哪一天。([1,31])monthOfYear
- 一年中的月份。([0,11])year
- 那一年。([-∞,∞])hourOfDay
- 一天中的时间。([0,11])minuteOfHour
- 小时的分钟。([0,59])meridianOfDay
- 当天的子午线。([0,1])
由于各种原因,其中大部分是通过使用 IR on web 数据获得的,其中一些字符串可能为空。那么问题是如何以特定于语言环境的方式格式化这些不完整的日期/时间。
我目前使用boost.locale 所做的是创建一个date_time
并添加各种完整的日期/时间组件,然后date_time
以特定于语言环境的方式将其存储在字符串中。像这样的东西:
这在某种程度上有效。我有一个语言环境格式化date_time
。但是,由于I 开头,不完整的字段填充了now的日期/时间。date_time
如果可以将不完整的字段标记为不包含在date_time
.
PS:我知道我可以为每个语言环境维护 127 (2 7 -1) 个格式化字符串,但是创建/查找这些字符串然后维护它们似乎是一种精神错乱的方法!
c++ - boost locale - 转换数字的基本用法?
好吧,这很“奇怪”,但我似乎无法使用 boost::locale (在 microsoft visual studio 2010 下)将数值转换为字符串并提高词法转换。
在德语语言环境中,“,”符号应用作十进制标识符。所以上面应该是“1.253”。但是它不起作用(lexical_cast 给出了一个例外) - 使用std::locale::global(std::locale("German_Germany.1252"));
确实有效 - 但是我希望使用便携式系统而不是将自己“限制”到微软的命名/代码页。
我将如何使用 boost::locale,或者使用比 std::locale 更便携的本地化?
firebreath - 将 boost locale 与 Firebreath 一起使用
我使用 Firebreath 创建了一个 chrome 扩展:http ://slimtext.org 我遇到了一个问题:该扩展在 Windows 上不能很好地支持中文字符。经过大量研究,我发现了这一点:http: //www.boost.org/doc/libs/1_50_0/libs/locale/doc/html/default_encoding_under_windows.html
我认为解决方案是使用 boost/locale。但是https://github.com/firebreath/firebreath-boost项目似乎不包含 boost/locale。1.50.0 分支包含比 master 分支更新的 boost,但它们都不包含 boost/locale。
我尝试使用外部提升,或从外部提升复制语言环境代码,但失败了。(在制作时无法链接到语言环境)
你有什么建议?如何将 boost locale 与 Firebreath 一起使用?
c++ - 何时使用 Boost.Locale 进行大小写折叠以及何时进行整理?
Boost.Locale提供了不同的选项来对两个字符串进行不区分大小写的比较。
boost::locale::collator
通过facet使用排序规则:
或通过boost::locale::fold_case
函数使用大小写折叠:
可以存储两个函数的中间结果,因此如果选择这样做,两者都可以优化。
根据文档,据我所知,案例折叠通常是与语言环境无关的操作,而排序规则是高度依赖语言环境的操作。
- 案例折叠方法有时会给出不正确的结果吗?
(让我害怕的是“一般”这个词。) - 有没有时候一个人比另一个人更受欢迎?
c++ - boost::locale::to_lower 抛出 bad_cast 异常
在 Win 7 64 位和 VS2010 上提升 1.54 x64。编译为“Release x64”并运行以下代码:
抛出std::bad_cast
异常。即使添加后也没有任何变化(如其他地方所建议的):
或更改to_lower(y)
为:to_lower(y, mylocale)
或使用std::string
代替std::wstring
或在环境中设置 LANG。
目标是转换为小写的意大利语 UTF-8 单词。我没有发现这样的问题,所以我认为这是我的机器特定问题或 boost 库问题。顺便说一句,我已经从 sourceforge 下载了预编译的 boost 库(boost_1_54_0-msvc-10.0-64.exe)。任何想法?谢谢!马里奥