我们正在制作一个 npm react 包(通过 tsdx 库),这是一个用于多语言反应项目的自定义钩子。安装此包的开发人员需要在根目录下创建一个config.json文件,并在其 Next.js 项目的公共文件夹中创建一个Languages.json文件。我们需要的是我们可以在应用程序的客户端读取Languages.json 。
包文件: LanguageProvider.tsx:存储当前语言环境状态的反应上下文。
UseTranslation.tsx:一个自定义钩子,它从上下文中获取语言环境并从 Languages.json 中的同一语言环境中找到键。
export function useTranslation() {
const { locale } = useContext(LanguageContext);
let LanguagesFile;
if (typeof window === 'undefined') {
const fs = require('fs');
LanguagesFile = fs.readFileSync("./public/Languages.json", 'utf8');
}
function t(key: string) {
if (typeof LanguagesFile !== 'undefined') {
const Languages = JSON.parse(LanguagesFile);
if (!Languages && !Languages[locale] && !Languages[locale][key]) {
console.warn(`No string '${key}' for locale '${locale}'`);
return false;
} else {
return Languages[locale][key].toString() || '';
}
}
}
return t;
}
当我从UseTranslation.tsx记录Languages.json文件时,它会显示服务器上的数据,但它在应用程序的客户端未定义。