reactjs - NextJS 谷歌翻译小部件
问题描述
我有一个 NextJS 应用程序,我想将 Google 自动翻译小部件添加到我的应用程序中。
所以做了一个这样的函数:
function googleTranslateElementInit() {
if (!window['google']) {
console.log('script added');
var script = document.createElement('SCRIPT');
script.src =
'//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';
document.getElementsByTagName('HEAD')[0].appendChild(script);
}
setTimeout(() => {
console.log('translation loaded');
new window.google.translate.TranslateElement(
{
pageLanguage: 'tr',
includedLanguages: 'ar,en,es,jv,ko,pt,ru,zh-CN,tr',
//layout: google.translate.TranslateElement.InlineLayout.SIMPLE,
//autoDisplay: false,
},
'google_translate_element'
);
}, 500);
}
我在中调用这个函数useEffect()
,它会加载,但是当我路由到另一个页面时它会消失。当我检查控制台时,即使我路由到另一个页面但翻译小部件没有出现,我每次都会看到translation loaded
这样的范围被调用,只有在我刷新页面时才会出现。setTimeout
我该如何解决这个问题?
解决方案
感谢SILENT 的回答:谷歌不再支持这个小部件。
所以我要为 NextJS 配置一个i18n (具有动态 json 存储的轻量级翻译模块)的 next-i18next。
另外,我认为这个小部件的问题是谷歌的 JS 代码将该小部件附加到 DOM 本身,因此它没有附加到 VirtualDOM,这就是为什么当我在应用程序中路由时,React 检查了 VirtualDOM 并更新 DOM 本身,所以小部件消失了,因为它没有打开虚拟DOM。(这只是一个猜测)
推荐阅读
- angular - 使用模拟器时,Firestore 规则中的 request.auth 为 null
- c# - 在 C# 中更新 SQL 数据表?
- sql - 无法通过查询从组中获取结果
- python - 如何按键合并制表符分隔的文件并向每个文件添加制表符?
- javascript - 如何删除“\\\”表单图像标签
- laravel - 使用 browsersync 时无法从移动设备访问 http://192.168.1.10:3000
- discord.js - 如何让不和谐机器人在任何频道中发送特定消息
- ios - 将 MTLTexture 转换为 CVPixelBuffer,错误 AGX:纹理读/写断言失败:bytes_per_row >= used_bytes_per_row
- php - 将 ACF 添加到自定义函数
- c++ - 如何在 Dev C++ 中显示甘特图?