当前位置: 首页 > news >正文

locale本地化库学习

std::locale 类型的对象(本地环境对象)是不可变刻面的一个不可变索引集。C++ 输入/输出库的每个流对象都与一个 std::locale 对象关联,并用它的各刻面来分析及格式化所有数据。另外,每个 std::basic_regex 对象也都与一个本地环境对象关联。 (C++11 起)本地环境对象也可以在标准容器和算法中用作进行字符串校排的谓词,而且也可以直接访问,以获得或修改它所保有的平面。

成员函数

operator=

替换本地环境
(公开成员函数)

combine

以复制自另一本地环境的编译时鉴别的刻面构造本地环境
(公开成员函数)

name

返回本地环境的名称,或若它无名则为 "*"
(公开成员函数)

operator==operator!=

(C++20 中移除)

本地环境对象之间的相等性比较
(公开成员函数)

operator()

用此本地环境的校排刻面以字典序比较两个字符串
(公开成员函数)

global

[静态]

更改全局本地环境
(公开静态成员函数)

示例代码:

#include <iostream>
#include <locale>
#include <string>         // std::string
#include <algorithm>      // std::sort
#include <vector>
#include <assert.h>int main()
{//name examplestd::locale loc(std::locale(), new std::ctype<char>);std::cout << "默认本地环境是 " << std::locale().name() << '\n'<< "用户的本地环境是 " << std::locale("").name() << '\n'<< "一个无名本地环境是 " << loc.name() << '\n';//combine exampleconst double number = 1000.25;std::cout << "\'C\' 本地环境:" << number << '\n';std::locale loc2 = std::locale().combine<std::numpunct<char>>(std::locale("en_US.UTF8"));std::cout.imbue(loc2);std::cout << "带有 en_US numpunct 的 \"C\" 本地环境:" << number << '\n';//global examplestd::wcout << "用户偏好的本地环境设置是" << std::locale("").name().c_str() << '\n';// 在启动时,全局本地环境是 "C" 本地环境std::wcout << 1000.01 << '\n';// 以用户偏好的本地环境替换 C++ 全局本地环境和 C 本地环境std::locale::global(std::locale("en_US.UTF8"));  //设置全局环境// 将来的宽字符输出会使用新的全局本地环境std::wcout.imbue(std::locale());// 再次输出同一数字std::wcout << 1000.01 << '\n';std::locale loc3;std::cout << "loc3.name()==================== " << loc3.name() << '\n';  //en_US.UTF8// locale::operator!= exampleif (std::cout.getloc() != std::locale("C"))std::cout << "cout is not using the C locale.\n";elsestd::cout << "cout is using the C locale.\n";// locale::operator() examplestd::string mystr[] = { "light","zoo","apple" };std::locale loc4;  // default global localestd::cout << std::boolalpha;// implicit call to locale::operator() (using operator)std::cout << mystr[0] << " < " << mystr[1] << " ? ";std::cout << (loc4(mystr[0], mystr[1])) << '\n';// explicit call to locale::operator() (using functional call)std::cout << mystr[1] << " < " << mystr[2] << " ? ";std::cout << (loc4.operator()(mystr[1], mystr[2])) << '\n';// locale::operator() as comparison predicate for algorithm:std::sort(mystr, mystr + 3, loc4);std::cout << "sorted sequence:";for (int i = 0; i < 3; i++) std::cout << ' ' << mystr[i];std::cout << '\n';// locale::operator= examplestd::locale loc5;std::cout << "loc5.name()==================== " << loc5.name() << '\n';  //en_US.UTF8loc5 = std::locale("ru_RU.UTF8");std::cout << "loc5.name()==================== " << loc5.name() << '\n';// locale::operator== exampleif (loc5 == std::locale("ru_RU.UTF8"))std::cout << "loc5 is using the ru_RU.UTF8 locale.\n";elsestd::cout << "loc5 is not using the ru_RU.UTF8 locale.\n";std::vector<std::wstring> v = { L"жил", L"был", L"кот" };std::sort(v.begin(), v.end(), std::locale("ru_RU.UTF8"));assert(v[0] == L"был");assert(v[1] == L"жил");assert(v[2] == L"кот");return 0;
}

运行结果:

参考:

https://cplusplus.com/reference/locale/locale/

标准库头文件 <locale> - cppreference.com

相关文章:

  • Linux应用 sqlite3编程
  • 如何学习自动化测试?(附教程)
  • 【iOS】内存泄漏检查及原因分析
  • 学习分享-注册中心Naocs的优雅上下线
  • axios设置 responseType为 “stream“流式获取后端数据
  • Docker 中运行的 MySQL 数据库与 Docker 外部的管理系统连接
  • blender
  • springboot 3 oauth2认证this.authorizationService.save(authorization)生成token报错异常
  • 常见汇编指令
  • 【数据结构】排序——插入排序,选择排序
  • [Cloud Networking] Layer 2
  • NineData云原生智能数据管理平台新功能发布|2024年5月版
  • 联合体和枚举<C语言>
  • 卡尔曼滤波器例子
  • MathType7.8永久破解版下载 让数学学习变得简单有趣!
  • 【面试系列】之二:关于js原型
  • 【知识碎片】第三方登录弹窗效果
  • 2017 年终总结 —— 在路上
  • co模块的前端实现
  • Docker 笔记(2):Dockerfile
  • Docker下部署自己的LNMP工作环境
  • HTML5新特性总结
  • javascript从右向左截取指定位数字符的3种方法
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • JavaWeb(学习笔记二)
  • Java-详解HashMap
  • JS 面试题总结
  • js写一个简单的选项卡
  • node.js
  • python_bomb----数据类型总结
  • React-Native - 收藏集 - 掘金
  • TypeScript实现数据结构(一)栈,队列,链表
  • uva 10370 Above Average
  • vue脚手架vue-cli
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 类orAPI - 收藏集 - 掘金
  • 三分钟教你同步 Visual Studio Code 设置
  • 我与Jetbrains的这些年
  • 线性表及其算法(java实现)
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 怎么把视频里的音乐提取出来
  • 我们雇佣了一只大猴子...
  • ###项目技术发展史
  • #define,static,const,三种常量的区别
  • #HarmonyOS:基础语法
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #每天一道面试题# 什么是MySQL的回表查询
  • #预处理和函数的对比以及条件编译
  • (1)虚拟机的安装与使用,linux系统安装
  • (5)STL算法之复制
  • (delphi11最新学习资料) Object Pascal 学习笔记---第5章第5节(delphi中的指针)
  • (搬运以学习)flask 上下文的实现
  • (超详细)语音信号处理之特征提取