问题标签 [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.

0 投票
1 回答
3327 浏览

c++ - Boost.Locale - C++ 中的 Unicode 字符串

我可以使用 Boost.Locale 使我的应用程序中的所有 std::string 都支持 Unicode 吗?阅读文档后,我可以说是。但我不明白它是如何工作的。主要问题是我还能使用 boost 字符串算法库或 Boost.Lexical_Cast 库吗?如果是,为什么我需要boost::locale::to_upper和类似的格式方法,如果我在 boost 字符串算法库中有这些方法。

0 投票
1 回答
863 浏览

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),我将不胜感激。

0 投票
1 回答
4376 浏览

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?

0 投票
1 回答
496 浏览

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。

0 投票
1 回答
1176 浏览

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 - 我会认为这不是必需的,因为我在构建中关闭了图标?

谁能让我深入了解正在发生的事情/我做错了什么以及为什么我没有得到记录的预期行为 - 或者至少有一些事情可以尝试?

干杯

克里斯

0 投票
0 回答
280 浏览

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) 个格式化字符串,但是创建/查找这些字符串然后维护它们似乎是一种精神错乱的方法!

0 投票
0 回答
233 浏览

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 更便携的本地化?

0 投票
2 回答
187 浏览

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 一起使用?

0 投票
1 回答
836 浏览

c++ - 何时使用 Boost.Locale 进行大小写折叠以及何时进行整理?

Boost.Locale提供了不同的选项来对两个字符串进行不区分大小写的比较。

boost::locale::collator通过facet使用排序规则:

或通过boost::locale::fold_case函数使用大小写折叠:

可以存储两个函数的中间结果,因此如果选择这样做,两者都可以优化。

根据文档,据我所知,案例折叠通常是与语言环境无关的操作,而排序规则是高度依赖语言环境的操作。

  • 案例折叠方法有时会给出不正确的结果吗?
    (让我害怕的是“一般”这个词。)
  • 有没有时候一个人比另一个人更受欢迎?
0 投票
1 回答
1772 浏览

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)。任何想法?谢谢!马里奥