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

react国际化配置react-i18next详解

react PC端项目构建TS,react@18.2.0+antd+vite+axios+redux+sass+ts 完整版代码下载:
https://download.csdn.net/download/randy521520/88922625
react PC端项目构建,react@18.2.0+antd+vite+axios+redux+sass完整版代码下载:
https://download.csdn.net/download/randy521520/88922569
react移动端项目构建TS,react@18.2.0+react-vant+vite+axios+redux+sass+ts完整版代码下载:
https://download.csdn.net/download/randy521520/88917557
react移动端项目构建,react@18.2.0+react-vant+vite+axios+redux+sass完整版代码下载:
https://download.csdn.net/download/randy521520/88917543

一、简介

react-i18next 是一个用于在 React 应用中实现国际化(Internationalization,简称 i18n)的库,它是基于 i18next 的 React 封装版本。国际化是指将应用程序设计成能够适应不同语言和文化习惯的过程,使得应用能够在不同地区和语言环境下使用。
react-i18next 提供了一种简单且强大的方式来实现 React 应用的国际化,它支持以下主要特性:
1.多语言支持: 可以轻松地在应用中集成多种语言的支持,使用户能够切换不同的语言版本。
2.文本翻译: 可以通过配置文件或者 API 来管理应用中的文本内容,实现文本的国际化翻译。
3.变量替换: 支持在翻译文本中插入变量,以便动态替换内容。
4.Pluralization(复数处理): 提供了复数形式处理的功能,以适应不同语言的复数规则。
5.Context(上下文)支持: 可以根据不同的上下文环境加载不同的翻译内容。
6.React Hooks 和 Higher-Order Components(HOC): 提供了方便的 React Hooks 和 HOC,使得在 React 组件中使用国际化变得更加简单。

二、配置国际化,需安装react-i18next、i18next

1.lang.js

import i18n from "i18next";
import { initReactI18next } from "react-i18next";//英文配置
const enConfig ={ok: 'OK',
};//中文配置
let zhConfig = {ok: '确定',
};//切换语言
export const changeLanguage = (events)=>{const lang = events.target.value;i18n.changeLanguage(lang)
};const resources = {'zh_CN': {translation: zhConfig,},'en': {translation: enConfig,},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',interpolation: {escapeValue: false,},
});export default i18n;

2.main.jsx

import ReactDOM from "react-dom/client";
import {BrowserRouter} from "react-router-dom";
import App from "./App.jsx";
import "@lang/lang.js";ReactDOM.createRoot(document.getElementById('root')).render(<BrowserRouter><App /></BrowserRouter>,
)

3.使用

import {useTranslation} from "react-i18next";const Home = () => {const {t} = useTranslation()return (<>{t('ok')}</>)
}export default Home;

在这里插入图片描述

三、i18next相关API

1.i18next.use(module):将其他插件加载到 i18next。
2.i18next.init(options, callback):初始化国际化配置

  • options:配置项
debug:控制台输出信息的调试级别。用于查找加载问题。
resources:初始化时使用的资源(如果不使用加载或不使用addResourceBundle进行附加)。
partialBundledLanguages:允许在使用后端加载非捆绑资源的同时使用捆绑资源进行初始化。
lng:要使用的语言(覆盖语言检测)。
fallbackLng:如果用户语言的翻译不可用,则使用的语言。
supportedLngs:允许的语言数组。
nonExplicitSupportedLngs:如果为true,将传递例如en-US,如果在supportedLngs中找到en。
load:要查找的语言代码,给定设置语言为'en-US':'all' --> ['en-US','en','dev'],'currentOnly' --> 'en-US','languageOnly' --> 'en'。
preload:要预加载的语言数组。在服务器端很重要,以确保在呈现视图之前加载翻译。
lowerCaseLng:语言将转换为小写,例如en-US --> en-us。
cleanCode:将语言转换为小写,EN --> en,同时保留完整的区域设置,如en-US。
ns:要加载的命名空间的字符串或数组。
defaultNS:如果未传递给翻译函数的默认命名空间。
fallbackNS:如果在给定命名空间中找不到键,则查找键的字符串或数组。
saveMissing:如果未找到键,则在后端调用保存缺失键功能。
saveMissingPlurals:如果未找到键,也为复数形式调用后端的保存缺失键功能。
updateMissing:启用以使用saveMissing更新默认值(仅在defaultValue与翻译值不同的情况下起作用)。
saveMissingTo:在使用saveMissing功能时不返回键作为默认值。
missingKeyNoValueFallbackToKey:用于自定义缺失键处理(需要将saveMissing设置为true)。
parseMissingKeyHandler:接收在't()'中未找到的键并返回一个值,该值将被't()'返回。
appendNamespaceToMissingKey:将命名空间附加到缺失键。
missingInterpolationHandler:在插值值未定义时调用。如果值为空字符串或null,则不会调用此方法。
simplifyPluralSuffix:对于只有1个复数形式的语言,将使用'plural'作为后缀。
postProcess:要应用的默认后处理器的字符串或数组。
postProcessPassResolved:将已解析的对象传递到后处理器的选项对象中作为'i18nResolved'属性。
returnNull:允许空值作为有效的翻译。
returnEmptyString:允许空字符串作为有效的翻译。
returnObjects:允许对象作为有效的翻译结果。
returnDetails:返回包含有关所使用的语言、命名空间、键和值的信息的对象。
returnedObjectHandler:如果作为键传递了对象但returnObjects设置为false,则调用此方法。
joinArrays:用于连接数组的字符,例如'\n'。
overloadTranslationOptionHandler:设置defaultValue的函数。
interpolation:插值选项。
react:用于React的选项。
initImmediate:在setTimeout内触发init函数中的资源加载(默认异步行为)。
keySeparator:用于分隔键的字符。
nsSeparator:用于分隔命名空间和键的字符。
pluralSeparator:用于分隔复数和键的字符。
contextSeparator:用于分隔上下文和键的字符。
appendNamespaceToCIMode:在使用'cimode'时将命名空间前缀到返回的键。
compatibilityJSON:兼容性JSON版本。
locizeLastUsed:用于locize-lastused的选项。
locizeLastUsed.projectId:您的locize项目的ID。
locizeLastUsed.apiKey:如果要发送缺失的键,则使用的API密钥。
locizeLastUsed.referenceLng:项目的参考语言,默认为'en'。
locizeLastUsed.version:版本,默认为'latest'。
locizeLastUsed.debounceSubmit:发送数据的防抖间隔(毫秒),默认为90000。
locizeLastUsed.allowedHosts:允许发送最后使用数据的主机名数组。请将这些主机限制在本地系统、演示、测试服务器(而非生产环境)。默认为['localhost']。
ignoreJSONStructure:自动查找嵌套键,如果未找到则查找平面键,反之亦然。
maxParallelReads:调用后端的并行度限制。
maxRetries:执行重试的最大次数。
retryTimeout:在失败请求的重试之间等待的时间。
  • callback:用于处理错误
    3.i18next.t(keys, options):获取对应key的配置文本,options省略获取当前语言的
    4.i18next.exists(key, options):判断对应的key是否存在
    5.i18next.getFixedT(lng, ns, keyPrefix):
const t = i18next.getFixedT(null, null, 'user.accountSettings.changePassword')
const title = t('title');

6.i18next.changeLanguage(lng, callback):切换当前语言

  • lng:需要切换的语言
  • callback:用于处理错误
    7.i18next.language、i18next.resolvedLanguage:获取当前是哪种语言
    8.i18next.languages:获取总共配置了哪些语言
    9.i18next.hasLoadedNamespace(ns, options):检查命名空间是否已加载
    10.i18next.loadLanguages(lngs, callback):预加载init中未定义的其他语言
    11.i18next.reloadResources():重新加载资源
    12.i18next.setDefaultNamespace(ns):更改默认命名空间
    13.i18next.dir(lng):获取语言读取方向, rtl 或 ltr
    14.i18next.format(data, format, lng):用于格式化文本
// key = 'hello {{what}}'
i18next.t('key', { what: i18next.format('world', 'uppercase') }); // -> hello WORLD
四、i18next相关事件

1.i18next.on(‘initialized’, function(options) {}):初始化事件
2.i18next.on(‘languageChanged’, function(lng) {}):语言改变事件
3.i18next.on(‘loaded’, function(loaded) {}):资源加载事件
4.i18next.on(‘failedLoading’, function(lng, ns, msg) {}):资源加载失败事件
5.i18next.on(‘missingKey’, function(lngs, namespace, key, res) {}):在访问不存在的密钥时被触发。需要将 saveMissing 设置为 true。
6.i18next.store.on(‘removed’, function(lng, ns) {}):资源删除事件
7.i18next.store.on(‘added’, function(lng, ns) {}):资源添加事件

五、react-i18next相关hook之useTranslation:获取函数组件中的 t 函数和 i18n 实例

1.基本使用

import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {translation: {ok:'确认',common:{placeholder: '请输入'}},},en: {translation: {ok:'确定',common:{placeholder: 'Please enter'}},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',interpolation: {escapeValue: false,},
});export default i18n;
import {useTranslation} from "react-i18next";const Home = () => {const {t,i18n} = useTranslation();console.log(t('ok'))return (<>{t('common.placeholder')}</>)
}export default Home;

2.配置命名空间

import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {common:{placeholder: '请输入'},translation: {ok:'确认',},},en: {common:{placeholder: 'Please enter'},translation: {ok:'ok',},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',ns: ['common'], // 定义命名空间数组defaultNS: 'translation', // 指定默认的命名空间interpolation: {escapeValue: false,},
});export default i18n;
import {useTranslation} from "react-i18next";const Home = () => {const {t} = useTranslation(['common','translation']);console.log(t('ok',{ ns: 'translation' })); //数组的第一个可以不传nsreturn (<>{t('placeholder')}</>)
}export default Home;

3.指定获取的前缀

import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {common:{placeholder: '请输入'},translation: {ok:'确认',very: {deeply: {nested: {test: '测试'}}}},},en: {common:{placeholder: 'Please enter'},translation: {ok:'ok',very: {deeply: {nested: {test: 'test'}}}},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',ns: ['common'], // 定义命名空间数组defaultNS: 'translation', // 指定默认的命名空间interpolation: {escapeValue: false,},
});export default i18n;
import {useTranslation} from "react-i18next";const Home = () => {const { t } = useTranslation('translation', { keyPrefix: 'very.deeply.nested' });return (<>{t('test')}</>)
}export default Home;

4.覆盖i18n实例

import i18n from './i18n';
const { t, i18n } = useTranslation('ns1', { i18n });

5.不使用 React Suspense 来处理翻译加载

const { t, i18n, ready } = useTranslation('ns1', { useSuspense: false });

6.使用方法:useTranslation(ns,options)。ns命名空间可以是字符串、数组;options配置如下

  • i18n:i18next 实例,用于提供国际化功能。
  • useSuspense:是否启用 React Suspense 模式来处理翻译加载。
  • keyPrefix:键前缀,用于在翻译键前添加前缀。
  • bindI18n:绑定 i18n 实例的方式,可以是字符串或 false。
  • nsMode:命名空间模式,指定命名空间的加载方式,可以是 ‘fallback’ 或 ‘default’。
  • lng:指定要使用的语言代码。
六、react-i18next高阶组件之withTranslation,服务端对应withSSR

1.基本使用

import {withTranslation} from "react-i18next";const Home = ({ t, i18n }) => {return (<>{t('ok')}</>)
}export default withTranslation()(Home);

2.指定命名空间获取

import {withTranslation} from "react-i18next";const Home = ({ t, i18n }) => {console.log(t('placeholder',{ns:'common'}))return (<>{t('ok')}</>)
}export default withTranslation(['translation','common'])(Home);

3.指定获取的前缀

import {withTranslation} from "react-i18next";const Home = ({ t, i18n }) => {return (<>{t('test')}</>)
}export default withTranslation('translation', { keyPrefix: 'very.deeply.nested' })(Home);

4.覆盖i18n实例

import i18n from './i18n';const ExtendedComponent = withTranslation('ns1')(MyComponent);<ExtendedComponent i18n={i18n} />

5.不使用 React Suspense 来处理翻译加载

const ExtendedComponent = withTranslation()(MyComponent);<ExtendedComponent useSuspense={false} />
七、react-i18next组件之Translation

1.基本使用

import {Translation} from "react-i18next";const Home = () => {return (<Translation>{(t, {i18n}) => <p>{t('ok')}</p>}</Translation>)
}export default Home;

2.指定命名空间获取

import {Translation} from "react-i18next";const Home = () => {return (<Translation ns={['translation','common']}>{(t, {i18n}) => <p>{t('placeholder',{ns:'common'})}</p>}</Translation>)
}export default Home;

3.指定获取的前缀

import {Translation} from "react-i18next";const Home = () => {return (<Translation ns='translation' keyPrefix='very.deeply.nested'>{(t, {i18n}) => <p>{t('test')}</p>}</Translation>)
}export default Home;

4.覆盖i18n实例

import i18n from './i18n';<Translation i18n={i18n}>
{(t, { i18n }) => <p>{t('my translated text')}</p> // will be looked up from namespace ns1
}
</Translation>

5.不使用 React Suspense 来处理翻译加载

import {Translation} from "react-i18next";const Home = () => {return (<Translation ns='translation' useSuspense={false}>{(t, {i18n}) => <p>{t('test')}</p>}</Translation>)
}export default Home;

6.相关属性

  • children:一个函数,接受三个参数(翻译函数 t、选项对象和加载状态 ready),返回 React 节点。
  • ns:命名空间,用于指定翻译内容所属的命名空间。
  • i18n:i18next 实例,用于提供国际化功能。
  • useSuspense:是否启用 React Suspense 模式来处理翻译加载。
  • keyPrefix:键前缀,用于在翻译键前添加前缀。
  • nsMode:命名空间模式,指定命名空间的加载方式,可以是 ‘fallback’ 或 ‘default’。
八、react-i18next组件之Trans

1.基本使用

import {Trans, useTranslation} from "react-i18next";const Home = () => {const { t } = useTranslation();return (<><Trans t={t}>ok</Trans><Trans t={t} i18nKey="ok"></Trans></>)
}export default Home;

2.指定命名空间获取

import {Trans, useTranslation} from "react-i18next";const Home = () => {const { t } = useTranslation(['translation','common']);return <Trans t={t} ns="common">placeholder</Trans>;
}export default Home;

3.覆盖i18n实例

import i18n from './i18n';<Trans t={t} i18n={i18n}>ok</Trans>

4.相关属性

  • children:子元素内容,可以是一个或多个 TransChild 元素。
  • components:自定义组件,可以是一个包含 React 元素的数组或对象,用于替换默认的标签渲染。
  • count:用于处理复数形式的计数。
  • context:上下文信息,用于指定翻译的上下文环境。
  • defaults:默认翻译文本,用于指定在未找到翻译时的默认文本。
  • i18n:i18next 实例,用于提供国际化功能。
  • i18nKey:指定的翻译键或键数组。
  • ns:命名空间,用于指定翻译内容所属的命名空间。
  • parent:父组件,用于在 React.createElement 中创建元素时指定父组件。
  • tOptions:翻译选项,用于传递给翻译函数的参数。
  • values:变量值对象,用于替换翻译文本中的变量占位符。
  • shouldUnescape:是否应解码转义字符。
  • t:用于执行翻译的函数。
九、react-i18next组件之I18nextProvider:注入实例
import { I18nextProvider } from 'react-i18next';
import i18n from './i18n';
import App from './App';<I18nextProvider i18n={i18n} defaultNS={'translation'}><App />
</I18nextProvider>
十、使用模板变量

1.lang.js

import i18n from "i18next";
import { initReactI18next } from "react-i18next";const resources = {zh_CN: {translation: {hello:'你好 {{text}}'},},en: {translation: {hello:'hello {{text}}'},},
};i18n.use(initReactI18next).init({resources,lng: 'zh_CN',fallbackLng: 'zh_CN',interpolation: {escapeValue: false,},
});export default i18n;

2.useTranslation 使用变量

import {useTranslation} from "react-i18next";const Home = () => {const {t,i18n} = useTranslation();let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = t('hello', { text: '世界' });} else if (i18n.language === 'en') {textToShow = t('hello', { text: 'world' });}return (<>{textToShow}</>)
}export default Home;

3.withTranslation 使用变量

import {withTranslation} from "react-i18next";const Home = ({t,i18n}) => {let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = t('hello', { text: '世界' });} else if (i18n.language === 'en') {textToShow = t('hello', { text: 'world' });}return (<>{textToShow}</>)
}export default withTranslation()(Home);

4.Translation 使用变量

import {Translation} from "react-i18next";const Home = () => {return (<Translation ns='translation' useSuspense={false}>{(t, {i18n}) => {let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = t('hello', { text: '世界' });} else if (i18n.language === 'en') {textToShow = t('hello', { text: 'world' });}return <p>{textToShow}</p>}}</Translation>)
}export default Home;

5.Trans 使用变量

import {Trans, useTranslation} from "react-i18next";const Home = () => {const { t,i18n } = useTranslation();let textToShow = '';if (i18n.language === 'zh_CN') {textToShow = '世界';} else if (i18n.language === 'en') {textToShow = 'world';}return (<><Trans t={t} values={{ text: textToShow}}>hello</Trans></>)
}export default Home;

相关文章:

react国际化配置react-i18next详解

react PC端项目构建TS&#xff0c;react18.2.0antdviteaxiosreduxsassts 完整版代码下载&#xff1a; https://download.csdn.net/download/randy521520/88922625 react PC端项目构建&#xff0c;react18.2.0antdviteaxiosreduxsass完整版代码下载&#xff1a; https://downloa…...

Java并发编程——上下文切换、死锁、资源限制

文章目录 1.1上下文切换&#xff08;1&#xff09;上下文切换的概念&#xff08;2&#xff09;多线程一定比单线程快吗&#xff1f;&#xff08;3&#xff09;测量上下文切换如何减少上下文切换 1.2 死锁&#xff08;1&#xff09;死锁的定义&#xff08;2&#xff09;死锁产生…...

MS08067练武场--WP

免责声明&#xff1a;本文仅用于学习和研究目的&#xff0c;不鼓励或支持任何非法活动。所有技术内容仅供个人技术提升使用&#xff0c;未经授权不得用于攻击、侵犯或破坏他人系统。我们不对因使用本文内容而引起的任何法律责任或损失承担责任。 注&#xff1a;此文章为快速通关…...

ubuntu文件同步

1. 使用 rsync 同步文件 rsync 是一个常用的文件同步工具&#xff0c;可以在本地或远程系统之间同步文件和目录。 基本用法&#xff1a; rsync -avz /源目录/ 目标目录/-a&#xff1a;归档模式&#xff0c;保留文件属性。-v&#xff1a;显示详细输出。-z&#xff1a;压缩传输…...

C++23 新特性解析

引言&#xff1a;C的持续进化 在ISO C标准委员会的不懈努力下&#xff0c;C23作为继C20后的又一重要迭代版本&#xff0c;带来了十余项核心语言特性改进和数十项标准库增强。本文将深入解析最具实用价值的五大新特性&#xff0c;介绍std::expected到模块化革命。 编译器支持 …...

算法05-堆排序

堆排序详解 堆排序&#xff08;Heap Sort&#xff09;是一种基于二叉堆数据结构的排序算法。它的核心思想是利用堆的性质&#xff08;最大堆或最小堆&#xff09;来实现排序。堆排序分为两个主要步骤&#xff1a;建堆和排序。 1. 什么是堆&#xff1f; 堆是一种特殊的完全二叉…...

Arrays工具类详解

目录 1. Arrays.toString() 方法 2. Arrays.deepToString() 方法 3. Arrays.equals(int[ ] arr1, int[ ] arr2) 方法 4. Arrays.equals(Object[] arr1, Object[] arr2) 方法 5. Arrays.deepEquals(Object[] arr1, Object[] arr2) 方法 6. Arrays.sort(int[] arr) 方法 7…...

无人机图像拼接数据的可视化与制图技术:以植被监测为例

无人机技术在生态环境监测中的应用越来越广泛&#xff0c;尤其是在植被监测领域。通过无人机获取的高分辨率影像数据&#xff0c;结合GIS技术&#xff0c;可以实现对植被覆盖、生长状况等的精确监测与分析。本文将通过一个实际案例&#xff0c;详细讲解无人机图像拼接数据的可视…...

在 debian 12 上安装 mysqlclient 报错

报错如下 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclientUsing cached https://pypi.tuna.tsinghua.edu.cn/packages/61/68/810093cb579daae426794bbd9d88aa830fae296e85172d18cb0f0e5dd4bc/mysqlclient-2.2.7.tar.gz (91 kB)Installi…...

python基础入门:7.1迭代器与生成器

Python迭代器与生成器深度解析&#xff1a;高效处理海量数据的利器 # 大文件分块读取生成器模板 def chunked_file_reader(file_path, chunk_size1024*1024):"""分块读取大文件生成器"""with open(file_path, r, encodingutf-8) as f:while Tru…...

Docker 容器 Elasticsearch 启动失败完整排查记录

背景 在服务器上运行 Docker 容器 es3&#xff0c;但 Elasticsearch 无法正常启动&#xff0c;运行 docker ps -a 发现 es3 处于 Exited (1) 状态&#xff0c;即进程异常退出。 本次排查从错误日志、容器挂载、权限问题、SELinux 影响、内核参数等多个方面入手&#xff0c;最…...

达梦数据使用笔记

相关文档&#xff1a; 达梦官网 达梦技术文档 1.安装完成后在开始菜单中搜索DM 目录&#xff1a;C:\ProgramData\Microsoft\Windows\Start Menu\Programs\达梦数据库 下有所有相关信息 2.数据迁移 https://eco.dameng.com/document/dm/zh-cn/start/mysql_dm.html https:…...

操作系统中的任务调度算法

一、引言 在操作系统中&#xff0c;任务调度算法是核心组件之一&#xff0c;它负责合理分配有限的 CPU 资源&#xff0c;以确保系统的高效运行和良好的用户体验。任务调度的目标是实现公平性、最小化等待时间、提高系统吞吐量&#xff0c;并最大化 CPU 的利用率。不同的任务调…...

Linux 虚拟服务器(LVS)技术详解

一、LVS 概述 Linux 虚拟服务器&#xff08;Linux Virtual Server&#xff0c;简称 LVS&#xff09;是由章文嵩博士开发的一种开源的服务器集群技术&#xff0c;它工作在 Linux 内核空间&#xff0c;为构建高可用、可扩展的网络服务提供了一种高效的解决方案。LVS 可以将多个真…...

AIoT时代来临,物联网技术如何颠覆未来生活?

在这个万物互联的时代&#xff0c;“物联网”&#xff08;IoT&#xff09;正以前所未有的速度改变我们的生活&#xff0c;而“AIoT”则是在物联网基础上融入人工智能技术&#xff0c;赋予设备更高的智能和自主决策能力。随着5G、边缘计算和云技术的不断发展&#xff0c;物联网正…...

C++17 新特性解析

C++17 是 C++ 标准的一个重要更新,它在 C++11/14 的基础上引入了许多新特性,进一步简化了代码编写、提升了性能和类型安全性。以下是 C++17 的主要特性分类介绍: 一、语言核心改进 1. 结构化绑定(Structured Bindings) 允许将元组、结构体或数组的成员直接解包到变量中。…...

嵌入式软件C语言面试常见问题及答案解析(四)

嵌入式软件C语言面试常见问题及答案解析(四) 原本打算将链表相关的面试题整合到一个文档中,奈何写着写着就发现题目比较多,题型也比较丰富,所以导致上一篇已经足够长了,再长也就有点不礼貌了。 所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者…...

在 C# 中,处理 Excel 和 PDF 文件的库有很多。以下是一些比较常用的选择

读取 Excel 文件的库 NPOI 用途&#xff1a;可以读取和写入 .xls 和 .xlsx 文件。特点&#xff1a;无需安装 Microsoft Office&#xff0c;支持简单的 Excel 操作&#xff0c;如格式化、公式、图表等。 EPPlus 用途&#xff1a;主要用于 .xlsx 格式&#xff08;Excel 2007 及以…...

绩效归因概述

绩效归因概述 1. 分类2. 基于净值的归因方法2.1 发展背景2.2 择时选股模型 T-M模型2.3 择时选股模型 H-M模型2.4 择时选股模型 C-L模型2.5 风格配置模型-Sharpe2.6 多因子模型 Fama-French32.7 多因子模型 Carhart42.8 多因子模型 Fama-French5 3. 基于持仓的归因方法3.1 发展背…...

Spring Boot 中加载多个 YAML 配置文件

在 Spring Boot 中加载多个 YAML 配置文件是一个常见的需求&#xff0c;通常用于将配置信息分离到多个文件中以便于管理和维护。Spring Boot 提供了灵活的方式来加载多个 YAML 配置文件。 以下是一些方法和步骤&#xff0c;用于在 Spring Boot 应用中加载多个 YAML 配置文件&a…...

厚植创新实力、聚焦生物科技:柏强制药的责任与机遇

在当今快速发展的医药行业中&#xff0c;创新已成为企业竞争的核心动力。贵州柏强制药作为医药领域的佼佼者&#xff0c;正以科技创新为引领&#xff0c;聚焦生物科技领域&#xff0c;不断突破&#xff0c;不仅为人民的健康事业贡献力量&#xff0c;更在激烈的市场竞争中抓住了…...

Linux中getifaddrs函数

文章目录 **函数原型****参数****返回值****释放资源****`struct ifaddrs` 结构****示例代码****输出示例****相关函数****总结**getifaddrs 是 Linux(以及其他 Unix-like 系统)中用于获取本机网络接口信息的系统调用。它提供了一种简单的方法来获取所有网络接口的地址信息,…...

【HarmonyOS Next 自定义可拖拽image】

效果图&#xff1a; 代码&#xff1a; import display from "ohos.display" import { AppUtil } from "pura/harmony-utils"/*** 自定义可拖拽图标组件*/ Component export default struct DraggableImage {imageResource?: ResourceimageHeight: numbe…...

解决No module named ‘llama_index.llms.huggingface‘

执行下面的脚本&#xff0c;报错No module named llama_index.llms.huggingface’执行下面的脚本&#xff0c;报错No module named llama_index.llms.huggingface’执行下面的脚本&#xff0c;报错No module named llama_index.llms.huggingface’执行下面的脚本&#xff0c;报…...

SearchBar组件的功能与用法

文章目录 1. 概念介绍2. 使用方法3. 代码与效果3.1 示例代码3.2 运行效果 4. 内容总结 我们在上一章回中介绍了"Material3中的IconButton"相关的内容&#xff0c;本章回中将介绍SearchBar组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…...

13.推荐系统的性能优化

接下来我们将学习推荐系统的性能优化。推荐系统的性能优化对于提升推荐结果的生成速度和系统的可扩展性至关重要&#xff0c;尤其是在处理大规模数据和高并发请求时。在这一课中&#xff0c;我们将介绍以下内容&#xff1a; 性能优化的重要性常见的性能优化方法实践示例 1. 性…...

Grafana-使用Button修改MySQL数据库

背景 众所周知&#xff0c;Grafana是一个用来展示数据的平台&#xff0c;但是有时候还是会有需求说能不能有一个按钮&#xff0c;点击的时候再对数据库进行修改&#xff0c;从而达到更新数据的效果 经过多方查证&#xff0c;终于实现了一个简单的&#xff0c;点击button执行sq…...

飞科FH6218电吹风异响维修

前言 本文仅记录一次普通的维修经历&#xff0c;解决方案也都是从网上查找资料得来&#xff0c;仅供参考&#xff0c;如有不对请指出&#xff0c;谢谢&#xff01; 现象 使用时出现异响&#xff0c;风速越大越响 参考视频 https://www.bilibili.com/video/BV1dD4y1x7hH/?…...

分治下的快速排序(典型算法思想)—— OJ例题算法解析思路

目录 一、75. 颜色分类 - 力扣(LeetCode) 运行代码: 一、算法核心思想 二、指针语义与分区逻辑 三、操作流程详解 四、数学正确性证明 五、实例推演(数组[2,0,2,1,1,0]) 六、工程实践优势 七、对比传统实现 八、潜在问题与解决方案 九、性能测试数据 十、扩展…...

Unity3D实现显示模型线框(shader)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、效果展示👉二、第一种方式👉二、第二种方式👉壁纸分享👉总结👉前言 在 Unity 中显示物体线框主要基于图形渲染管线和特定的渲染模式。 要显示物体的线框,通常有两种常见的方法:一种是利用内置的渲染…...