C++Qt开发——Linguist语言家

news2025/7/7 23:56:02

Qt Linguist

简介

Qt提供了一款优秀的支持Qt C++和Qt Quick应用程序的翻译工具。发布者、翻译者和开发者可以使用这款工具来完成他们的任务。

发布者:承担了全面发布应用程序的责任。通常,他们协调开发者和翻译者的工作,可以使用lupdate工具同步源代码,进行翻译,使用lrelease同步工具为发布应用程序创建运行时使用的翻译文件。

翻译者:可以使用Qt Linguist工具翻译应用程序的文本。当然,这必须要有专业的翻译知识。

开发者:必须创建Qt应用程序能够使用的翻译文本。也应该帮助翻译者识别短语出现的场景。

以上有三种角色-发布者、翻译者、开发者,当然很多情况下,其实就是一种,那就是程序猿自己,大家都懂的。

使用流程

1,使用tr包裹字符串

如果想让你的程序实现国际化,那么就在用户所有可见的字符串处都使用QObject::tr()。

[static] QString QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)

2,修改pro文件

在.pro文件中添加翻译文件名称。

TRANSLATIONS += translations/zh_CN.ts \   /*中文翻译文件*/
                translations/en.ts        /*英文翻译文件*/

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

3,生成翻译文件

点击 菜单栏->工具->外部->Qt语言家->更新翻译(lupdae),此时会在translations目录下面生成zh_CN.ts和en.ts两个文件。

4,打开翻译文件,并翻译

4.1 修改xml,翻译

ts文件实际上是一个xml文件,直接可以用文本编辑器打开。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="en">                            <!-- 版本和语言 -->
<context>
    <name>MainWindow</name>
    <message>
        <location filename="../mainwindow.ui" line="14"/>   <!-- 文本位置-->
        <source>MainWindow</source>                         <!-- 源文本-->
        <translatorcomment>title</translatorcomment>        <!-- 注释 -->
        <translation>Maye</translation>                     <!-- 翻译文本 -->
    </message>
    <message>
        <location filename="../mainwindow.ui" line="27"/>
        <source>用户名</source>
        <translation>username</translation>
    </message>
    <message>
        <location filename="../mainwindow.ui" line="40"/>
        <source>密码</source>
        <translation>password</translation>
    </message>
    <message>
        <location filename="../mainwindow.ui" line="73"/>
        <source>登录</source>
        <translation>login</translation>
    </message>
    <message>
        <location filename="../mainwindow.ui" line="86"/>
        <source>注册</source>
        <translation>register</translation>
    </message>
    <message>
        <location filename="../mainwindow.ui" line="100"/>
        <source>中文</source>
        <translation>chinese</translation>
    </message>
    <message>
        <location filename="../mainwindow.ui" line="105"/>
        <source>英文</source>
        <translation type="unfinished">English</translation>
    </message>
    <message>
        <location filename="../mainwindow.ui" line="119"/>
        <source>语言</source>
        <translation type="unfinished">language</translation>
    </message>
</context>
</TS>
​

4.1 使用语言家翻译

找到Linguist预言家打开,点击菜单栏->文件->打开,选择上面生成的.ts文件,并打开。

打开之后可以看到如下界面,主要就是对语言进行翻译。

翻译前面的图标及含义:

图标含义

未翻译

已翻译,未标记完成

已翻译,且已标记完成

4.2 使用短语书让翻译变得更快捷

短语书就是一个提前写好的翻译对照文件,在翻译ts文件的时候,可以打开短语书,很方便的就可以看到翻译。

1. 新建短语书

然后把需要的翻译提前写好,以后也可以重复使用。选择源语言和目标语言。

2. 编辑短语书

短语书创建完成之后,就可以开始编辑短语书了。

如下:先新建条目,再写上源文、译文、以及准确度(可以不写,也可以随便写点东西),最后点击保存,就可以关掉窗口了

3. 使用短语书

如果使用已经写好的短语书,而不是刚刚创建的,那么需要先打开短语书。如果是刚在预言家上创建的,则是打开状态的。

5,发布翻译

翻译完成之后,就可以发布翻译了,为什么要发布呢?发布是什么意思?

  • ts文件是文本文件,占用内存比较大,发布之后会生成对应的二进制文件,内存较小

  • 通过发布就可以把ts文件转换成二进制文件

发布的方式有两种:

  • 通过语言家发布

    • 点击 菜单栏->文件->发布全部即可发布所有ts文件

  • 通过Qt Creator发布

    • 点击 菜单栏->工具->外部->Qt语言家->发布翻译(lrelease),会在translations目录中生成zc_CN.qm和en.qm两个文件。

6,加载语言文件

QTranslator类为文本输出提供国际化支持。

该类的对象包含一组从源语言到目标语言的翻译。 QTranslator提供了在翻译文件中查找翻译的功能。 翻译文件使用Qt Linguist创建。

QTranslator translator;
if(translator.load("linguist_en.qm","F:\\MyCode\\QtCode\\Lingguist\\translate"))
{
      qApp->installTranslator(&translator);
      ui->retranslateUi(this);
}

注意:翻译文件加载的位置必须在界面实例化之前完成,否则是没有效果的.

7,动态切换语言

如果界面是通过Ui生成的,切换语言之后,可以通过调用函数retranslateUi翻译界面,否则需要重启程序.

  • 下拉框切换语言

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    QString filename;
    switch (index)
    {
    case 0:
        filename = "linguist_zh_CN.qm";      
        break;
    case 1:
        filename = "linguist_en.qm";
        break;
    }
    QTranslator translator;
    if(!translator.load(filename,"F:\\MyCode\\QtCode\\Lingguist\\translate"))
    {
        qDebug()<<"翻译文件加载失败";
        return;
    }
    if(qApp->installTranslator(&translator))
    {
        qDebug()<<"安装成功";
    }else
    {
        qDebug()<<"安装失败";
    }
    ui->retranslateUi(this);
}
  • 保存语言选择和恢复语言

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

保存

void MainWindow::on_comboBox_currentIndexChanged(int index)
{
    QString filename;
    switch (index)
    {
    case 0:
        filename = "linguist_zh_CN.qm";
        break;
    case 1:
        filename = "linguist_en.qm";
        break;
    }
    //保存配置
    QSettings setting("config.ini",QSettings::Format::IniFormat);
    setting.setValue("ts",filename);
    ...
}

恢复

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
​
    QSettings setting("config.ini",QSettings::Format::IniFormat);
    QString filename = setting.value("ts").toString();
​
    QTranslator translator;
    if(!translator.load(filename,"F:\\MyCode\\QtCode\\Lingguist\\translate"))
    {
        qDebug()<<"翻译文件加载失败";
    }
    if(qApp->installTranslator(&translator))
    {
        qDebug()<<"安装成功";
    }else
    {
        qDebug()<<"安装失败";
    }
​
    MainWindow w;
    w.show();
    return a.exec();
}
  • 重启程序

//重启程序才能生效,是否重启
auto ret = QMessageBox::information(this,"hit","是否重启",QMessageBox::StandardButton::Ok,QMessageBox::No);
if(ret == QMessageBox::Ok)
{
    QString exe =  QApplication::applicationDirPath()+"/"+qAppName()+".exe";
    QProcess::startDetached(exe);
    qApp->quit();
}

在论坛中漂,经常遇到有人遇到tr相关的问题。用tr的有两类人:

  • (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr

  • (2)另一类人,确实是出于国际化的需要,将需要在界面上显示的文件都用tr包起来,这有分两种:

    • (2a) 用tr包住英文(最最推荐的用法,源码英文,然后提供英文到其他语言的翻译包)

    • (2b) 用tr包住中文(源码用中文,然后提供中文到其他语言的翻译包)

注意哦,如果你正在用tr包裹中文字符,却不属于(2b),那么:

  • 你在误用tr

  • 你需要的是QString,而不是tr

如果你确实属于(2b),请做好心理准备,你可能还会遇到很多困难,

tr 是做什么的?下面二者的区别是什么?

QString text1 = QObject::tr("hello"); 
QString text2 = QString("hello");

tr是用来实现国际化,如果你为这个程序提供了中文翻译包(其中hello被翻译成中文"你好"),那么text1的内容将是中文"你好";如果你为程序提供且使用日文翻译包,那么text1的内容将是日文。

tr是经过多级函数调用才实现了翻译操作,是有代价的,所以不该用的时候最好不要用。

各国语言代码和名称表

语言代码语言名称
af南非语
af-ZA南非语
ar阿拉伯语
ar-AE阿拉伯语(阿联酋)
ar-BH阿拉伯语(巴林)
ar-DZ阿拉伯语(阿尔及利亚)
ar-EG阿拉伯语(埃及)
ar-IQ阿拉伯语(伊拉克)
ar-JO阿拉伯语(约旦)
ar-KW阿拉伯语(科威特)
ar-LB阿拉伯语(黎巴嫩)
ar-LY阿拉伯语(利比亚)
ar-MA阿拉伯语(摩洛哥)
ar-OM阿拉伯语(阿曼)
ar-QA阿拉伯语(卡塔尔)
ar-SA阿拉伯语(沙特阿拉伯)
ar-SY阿拉伯语(叙利亚)
ar-TN阿拉伯语(突尼斯)
ar-YE阿拉伯语(也门)
az阿塞拜疆语
az-AZ阿塞拜疆语(拉丁文)
az-AZ阿塞拜疆语(西里尔文)
be比利时语
be-BY比利时语
bg保加利亚语
bg-BG保加利亚语
bs-BA波斯尼亚语(拉丁文,波斯尼亚和黑塞哥维那)
ca加泰隆语
ca-ES加泰隆语
cs捷克语
cs-CZ捷克语
cy威尔士语
cy-GB威尔士语
da丹麦语
da-DK丹麦语
de德语
de-AT德语(奥地利)
de-CH德语(瑞士)
de-DE德语(德国)
de-LI德语(列支敦士登)
de-LU德语(卢森堡)
dv第维埃语
dv-MV第维埃语
el希腊语
el-GR希腊语
en英语
en-AU英语(澳大利亚)
en-BZ英语(伯利兹)
en-CA英语(加拿大)
en-CB英语(加勒比海)
en-GB英语(英国)
en-IE英语(爱尔兰)
en-JM英语(牙买加)
en-NZ英语(新西兰)
en-PH英语(菲律宾)
en-TT英语(特立尼达)
en-US英语(美国)
en-ZA英语(南非)
en-ZW英语(津巴布韦)
eo世界语
es西班牙语
es-AR西班牙语(阿根廷)
es-BO西班牙语(玻利维亚)
es-CL西班牙语(智利)
es-CO西班牙语(哥伦比亚)
es-CR西班牙语(哥斯达黎加)
es-DO西班牙语(多米尼加共和国)
es-EC西班牙语(厄瓜多尔)
es-ES西班牙语(传统)
es-ES西班牙语(国际)
es-GT西班牙语(危地马拉)
es-HN西班牙语(洪都拉斯)
es-MX西班牙语(墨西哥)
es-NI西班牙语(尼加拉瓜)
es-PA西班牙语(巴拿马)
es-PE西班牙语(秘鲁)
es-PR西班牙语(波多黎各(美))
es-PY西班牙语(巴拉圭)
es-SV西班牙语(萨尔瓦多)
es-UY西班牙语(乌拉圭)
es-VE西班牙语(委内瑞拉)
et爱沙尼亚语
et-EE爱沙尼亚语
eu巴士克语
eu-ES巴士克语
fa法斯语
fa-IR法斯语
fi芬兰语
fi-FI芬兰语
fo法罗语
fo-FO法罗语
fr法语
fr-BE法语(比利时)
fr-CA法语(加拿大)
fr-CH法语(瑞士)
fr-FR法语(法国)
fr-LU法语(卢森堡)
fr-MC法语(摩纳哥)
gl加里西亚语
gl-ES加里西亚语
gu古吉拉特语
gu-IN古吉拉特语
he希伯来语
he-IL希伯来语
hi印地语
hi-IN印地语
hr克罗地亚语
hr-BA克罗地亚语(波斯尼亚和黑塞哥维那)
hr-HR克罗地亚语
hu匈牙利语
hu-HU匈牙利语
hy亚美尼亚语
hy-AM亚美尼亚语
id印度尼西亚语
id-ID印度尼西亚语
is冰岛语
is-IS冰岛语
it意大利语
it-CH意大利语(瑞士)
it-IT意大利语(意大利)
ja日语
ja-JP日语
ka格鲁吉亚语
ka-GE格鲁吉亚语
kk哈萨克语
kk-KZ哈萨克语
kn卡纳拉语
kn-IN卡纳拉语
ko朝鲜语
ko-KR朝鲜语
kok孔卡尼语
kok-IN孔卡尼语
ky吉尔吉斯语
ky-KG吉尔吉斯语(西里尔文)
lt立陶宛语
lt-LT立陶宛语
lv拉脱维亚语
lv-LV拉脱维亚语
mi毛利语
mi-NZ毛利语
mk马其顿语
mk-MK马其顿语(FYROM)
mn蒙古语
mn-MN蒙古语(西里尔文)
mr马拉地语
mr-IN马拉地语
ms马来语
ms-BN马来语(文莱达鲁萨兰)
ms-MY马来语(马来西亚)
mt马耳他语
mt-MT马耳他语
nb挪威语(伯克梅尔)
nb-NO挪威语(伯克梅尔)(挪威)
nl荷兰语
nl-BE荷兰语(比利时)
nl-NL荷兰语(荷兰)
nn-NO挪威语(尼诺斯克)(挪威)
ns北梭托语
ns-ZA北梭托语
pa旁遮普语
pa-IN旁遮普语
pl波兰语
pl-PL波兰语
pt葡萄牙语
pt-BR葡萄牙语(巴西)
pt-PT葡萄牙语(葡萄牙)
qu克丘亚语
qu-BO克丘亚语(玻利维亚)
qu-EC克丘亚语(厄瓜多尔)
qu-PE克丘亚语(秘鲁)
ro罗马尼亚语
ro-RO罗马尼亚语
ru俄语
ru-RU俄语
sa梵文
sa-IN梵文
se北萨摩斯语
se-FI北萨摩斯语(芬兰)
se-FI斯科特萨摩斯语(芬兰)
se-FI伊那里萨摩斯语(芬兰)
se-NO北萨摩斯语(挪威)
se-NO律勒欧萨摩斯语(挪威)
se-NO南萨摩斯语(挪威)
se-SE北萨摩斯语(瑞典)
se-SE律勒欧萨摩斯语(瑞典)
se-SE南萨摩斯语(瑞典)
sk斯洛伐克语
sk-SK斯洛伐克语
sl斯洛文尼亚语
sl-SI斯洛文尼亚语
sq阿尔巴尼亚语
sq-AL阿尔巴尼亚语
sr-BA塞尔维亚语(拉丁文,波斯尼亚和黑塞哥维那)
sr-BA塞尔维亚语(西里尔文,波斯尼亚和黑塞哥维那)
sr-SP塞尔维亚(拉丁)
sr-SP塞尔维亚(西里尔文)
sv瑞典语
sv-FI瑞典语(芬兰)
sv-SE瑞典语
sw斯瓦希里语
sw-KE斯瓦希里语
syr叙利亚语
syr-SY叙利亚语
ta泰米尔语
ta-IN泰米尔语
te泰卢固语
te-IN泰卢固语
th泰语
th-TH泰语
tl塔加路语
tl-PH塔加路语(菲律宾)
tn茨瓦纳语
tn-ZA茨瓦纳语
tr土耳其语
tr-TR土耳其语
ts宗加语
tt鞑靼语
tt-RU鞑靼语
uk乌克兰语
uk-UA乌克兰语
ur乌都语
ur-PK乌都语
uz乌兹别克语
uz-UZ乌兹别克语(拉丁文)
uz-UZ乌兹别克语(西里尔文)
vi越南语
vi-VN越南语
xh班图语
xh-ZA班图语
zh中文
zh-CN中文(简体)
zh-HK中文(香港)
zh-MO中文(澳门)
zh-SG中文(新加坡)
zh-TW中文(繁体)
zu祖鲁语
zu-ZA祖鲁语

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/6925.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

激光雷达的厮杀18年:西方“诸神黄昏”,东方“新王隐现”

鼻祖、发明家、神童、梦想家、特种兵和中国双星&#xff0c;激光雷达“诸神混战”&#xff0c;行业疯狂洗牌。 风云激荡中&#xff0c;每个人都在亲身见证历史。 2004年&#xff0c;美国发起DARPA挑战赛&#xff0c;无人车上路&#xff0c;汽车上首次出现激光雷达。 2010年之…

原型工具墨刀的使用

刚开始接触原型工具是大学时候了&#xff0c;大学参加大创的时候第一次接触并使用原型工具做了小程序项目原型。那时候是下载的客户端。 最近&#xff0c;又开始思考在用户沟通过程中为方便沟通&#xff0c;可以先自己用原型工具简单的设计一下先。 首先&#xff1a;网页版好用…

JavaScript流程控制-循环(循环(for 循环,双重 for 循环,while 循环,do while 循环,continue break))

目录 JavaScript流程控制-循环 循环 for 循环 执行过程&#xff1a; 断点调试&#xff1a; 案例一&#xff1a;求1-100之间所有整数的累加和 案例二&#xff1a;求1-100之间所有数的平均值 案例三&#xff1a;求1-100之间所有偶数和奇数的和 案例四&#xff1a;求1-10…

哈希(Hash) - 开散列/闭散列

文章目录&#xff1a;认识哈希哈希函数处理冲突的方法闭散列&#xff08;开放定址法&#xff09;开散列&#xff08;链地址法&#xff09;哈希表闭散列实现闭散列基本框架哈希表闭散列插入&#xff08;insert&#xff09;哈希表闭散列删除&#xff08;erase&#xff09;哈希表闭…

深度学习模型部署全流程-模型部署

往期回顾&#xff1a;模型训练 文章目录前言模型部署全流程1.推理框架2.onnx模型3.模型转换4.代码实现5.完整代码小结前言 在上一篇文章中详细讲述了模型训练的流程&#xff0c;这篇文章主要介绍模型部署的流程。模型部署通常指通过C/C语言能够把python框架训练好的模型跑起来…

【ROS】机械人开发一--树莓派安装ubuntu18.04

前言&#xff1a;安装了一天的树莓派系统&#xff0c;遇到了很多坑&#xff0c;这里将教程详细分享一下&#xff0c;方便大家快速的安装系统。 目录一、操作环境硬件软件二、资源下载链接三、具体步骤烧入修改镜像文件问题修改重启时间PC端使用xshell远程连接修改软件源安装ubu…

嵌入式软件调试(Debug)方法

嵌入式软件调试&#xff08;Debug&#xff09;方法1 问题定位和分析方法1.1 二分定位法1.2 数据流方法1.3 隔离法1.4 汇编法1.5 ABA法1.6 版本回溯确认法1.7 调试IO法2 调试注意事项3 典型问题类型1 问题定位和分析方法 1.1 二分定位法 方法阐述&#xff1a; 在任务中或者可能…

Redis介绍与下载

初识Redis Redis介绍 由Salvatore Sanfilippo写的key-value存储系统&#xff0c;是跨平台的非关系型数据库 Redis通常被称之为数据结构服务器&#xff0c;因为值(value)可以是字符串、哈希、列表、集合和有序集合等类型 Redis是完全开源的遵守BSD协议&#xff0c;是一个高性能的…

看着别人月入过万,30岁想转入做软件测试,有什么难度?

我见过很多30岁转行软件测试成功的&#xff0c;也见过软件测试转行失败的。 说实话&#xff0c;30岁转行需要付出比一般人更加多的努力。 并且每一步的路都不能走偏。 30岁了&#xff0c;转行肯定不像才毕业的小年轻那么容易&#xff0c;毕竟你转行要跟社会上已经从事过几年的…

Android移动应用开发之使用room实现数据库的增删改查

文章目录前言核心代码前言 我们直接开门见山&#xff0c;展示一下效果&#xff1a; 数据库的插入和查询&#xff1a; 数据库的修改和查询&#xff1a; 可以看到id为23的数据发生了修改。 删除一条数据&#xff1a; 可以看到id为23的数据被删除了 删除全部数据&#xff1…

Sedex验厂有证书吗?

【Sedex验厂有证书吗&#xff1f;】 SEDEX 是一个全球性的会员制组织&#xff0c;旨在帮助企业在负责任商业中去繁存简&#xff0c;携手共进。买家、供应商和审计员可以在平台上快速轻松地储存、共享和报告信息。 SMETA&#xff08;Sedex Members Ethical Trade Audit&#xff…

日本知名汽车零部件公司巡礼系列之株式会社111

株式会社111 业务内容&#xff1a; . 在所有领域的零件缴纳各种都有相应的实际业绩 &#xff08;例&#xff09;OA器械、光学器械、汽车其他运送器械、医疗器械、各种制造装置零件、机器人相关零件、能源相关零件、航空相关零件等 广泛应对各种材料产品 铁、铝、不锈钢、合…

【FLASH存储器系列八】ONFI数据接口详述之一

目录 1.1 数据接口类型概览 1.2 信号功能分配 1.3 接口模式切换 1.1 数据接口类型概览 ONFI目前支持5中不同的数据接口类型&#xff1a;SDR&#xff0c;NV-DDR&#xff0c;NV-DDR2、NV-DDR3和NV-LPDDR4。SDR是传统的NAND接口&#xff0c;使用RE_n锁存读数据&#xff0c;WE_n锁…

MSP430F5529库函数——模数转换模块(ADC12)软件触发

需提前观看&#xff1a;MSP430F5529库函数学习——串口 目录 代码 ADC初始化部分 引脚复位 ADC12_A_init&#xff08;&#xff09; 函数声明 baseAddress sampleHoldSignalSourceSelect clockSourceSelec clockSourceDivider ADC12_A_enable&#xff08;&#xff09;…

有关javascript中事件对象e

一、简单认识e 事件对象e&#xff0c;是event的简称。当一个事件被触发时候&#xff0c;这个事件的有关数据都会被存储在一个事件对象e里面&#xff0c;这个对象e有许多固定方法提供给我们查看里面各种数据。 二、关于e对象的常用属性介绍 1. e.eventPhase查看事件触发所处的阶…

MySQL索引原理笔记

注意&#xff1a;本博客为个人学习记录&#xff0c;不保证正确性&#xff0c;仅供参考指正 MySQL索引原理以及SQL优化 文章目录MySQL索引原理以及SQL优化索引与约束覆盖索引最左匹配规则索引下推&#xff08;面试重点&#xff09;索引存储索引失效如何解决sql比较慢的问题索引…

【JavaWeb】JSP(172-190)

172.Jsp-什么是jsp&#xff0c;以及它有什么作用 jsp 的全换是 java server pages。Java 的服务器页面。 jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据。 因为 Servlet 程序回传 html 页面数据是一件非常繁锁的事情。开发成本和维护成本都极高。 Servlet 回传 htm…

大白话讲解MySQL 索引,页分裂,行溢出,事务

目录 一、索引 索引是什么&#xff0c;页分裂 页的结构 mysql怎么查询数据 二、页合并 三、行溢出 四、事务 事务四大特性 1、原子性 2、一致性 3、隔离性 4、持久性 事务隔离级别 隔离级别导致的问题 隔离级别与锁的关系 锁与快照读、当前读的关系 RR快照读与…

网页信息采集-网页数据采集方法

随着社会不停的发展。人们也是越来越离不开互联网&#xff0c;今天小编就给大家盘点一下免费的网页信息采集&#xff0c;只需要点几下鼠标就能轻松爬取数据&#xff0c;不管是导出excel还是自动发布到网站都支持。详细参考图片一、二、三、四&#xff01; 企业人员 通过爬取动…

[附源码]计算机毕业设计JAVA创意众筹网站

[附源码]计算机毕业设计JAVA创意众筹网站 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…