【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发

news2025/2/22 8:34:31

sgGoogleTranslate源码

<template>
  <div :id="$options.name"> </div>
</template>
<script>
export default {
  name: "sgGoogleTranslate",
  props: ["languages", "currentLanguage"],
  data() {
    return {
      //语言列表,遵循 ISO 639-1 标准,俩位的code(参考:https://zh.wikipedia.org/wiki/ISO_639-1)
      defaultLanguages: [
        { code: "en", name: "English", cname: "英语", ename: "English", },
        { code: "af", name: "Afrikaans", cname: "南非语", ename: "Afrikaans", },
        { code: "sq", name: "Gjuha shqipe", cname: "阿尔巴尼亚语", ename: "Albanian", },
        { code: "ar", name: "العربية", cname: "阿拉伯语", ename: "Arabic", },
        { code: "hy", name: "Հայերեն", cname: "亚美尼亚语", ename: "Armenian", },
        { code: "az", name: "Азәрбајҹан дили", cname: "阿塞拜疆语", ename: "Azerbaijani", },
        { code: "eu", name: "Euskara", cname: "巴斯克语", ename: "Basque", },
        { code: "be", name: "беларуская мова", cname: "白俄罗斯语", ename: "Belarusian", },
        { code: "bg", name: "български език", cname: "保加利亚语", ename: "Bulgarian", },
        { code: "ca", name: "Català", cname: "加泰罗尼亚语", ename: "Catalan", },
        { code: "zh-CN", name: "Chinese (Simplified)", cname: "中文 (简体)", ename: "Chinese (Simplified)", },
        { code: "zh-TW", name: "Chinese (Traditional)", cname: "中文 (繁体)", ename: "Chinese (Traditional)", },
        { code: "hr", name: "Српскохрватски језик", cname: "克罗地亚语", ename: "Croatian", },
        { code: "cs", name: "čeština", cname: "捷克语", ename: "Czech", },
        { code: "da", name: "Danmark", cname: "丹麦语", ename: "Danish", },
        { code: "nl", name: "Nederlands", cname: "荷兰语", ename: "Dutch", },
        { code: "et", name: "eesti keel", cname: "爱沙尼亚语", ename: "Estonian", },
        { code: "tl", name: "Filipino", cname: "菲律宾语", ename: "Filipino", },
        { code: "fi", name: "Finnish", cname: "芬兰语", ename: "Finnish", },
        { code: "fr", name: "Français", cname: "法语", ename: "French", },
        { code: "de", name: "Deutsch", cname: "德语", ename: "German", },
        { code: "el", name: "Ελληνικά", cname: "希腊语", ename: "Greek", },
        { code: "hu", name: "magyar", cname: "匈牙利语", ename: "Hungarian", },
        { code: "id", name: "Indonesia", cname: "印度尼西亚语", ename: "Indonesian", },
        { code: "ga", name: "Irish", cname: "爱尔兰语", ename: "Irish", },
        { code: "it", name: "Italiano", cname: "意大利语", ename: "Italian", },
        { code: "ja", name: "にほんご", cname: "日语", ename: "Japanese", },
        { code: "ko", name: "한국어", cname: "韩语", ename: "Korean", },
        { code: "lt", name: "lietuvių kalba", cname: "立陶宛语", ename: "Lithuanian", },
        { code: "ms", name: "Malay", cname: "马来西亚语", ename: "Malay", },
        { code: "no", name: "norsk", cname: "挪威语", ename: "Norwegian", },
        { code: "pl", name: "Polski", cname: "波兰语", ename: "Polish", },
        { code: "pt", name: "Português", cname: "葡萄牙语", ename: "Portuguese", },
        { code: "ro", name: "limba română", cname: "罗马尼亚语", ename: "Romanian", },
        { code: "ru", name: "Русский", cname: "俄语", ename: "Russian", },
        { code: "es", name: "Español", cname: "西班牙语", ename: "Spanish", },
        { code: "sv", name: "Swedish", cname: "瑞典语", ename: "Swedish", },
        { code: "th", name: "ภาษาไทย", cname: "泰语", ename: "Thai", },
        { code: "tr", name: "Turkish", cname: "土耳其语", ename: "Turkish", },
        { code: "uk", name: "українська мова", cname: "乌克兰语", ename: "Ukrainian", },
      ],
    };
  },
  mounted() {
    //google翻译插件初始化
    window[this.$options.name] = () => {
      new window.google.translate.TranslateElement(
        {
          pageLanguage: this.currentLanguage || "auto",//默认页面源语言code:zh-CN 简体中文
          includedLanguages: (this.languages || this.defaultLanguages).map(v => v.code).join(','),
          autoDisplay: true,
          layout: google.translate.TranslateElement.InlineLayout.horizontal
        },
        this.$options.name
      );
    };
    this.loadJS(`https://translate.google.com/translate_a/element.js?cb=${this.$options.name}`);//如果该网址无法在国内访问,将无法使用google翻译插件
  },
  methods: {
    loadJS(url, callback) {
      let script = document.createElement("script");
      script.type = "text/javascript";
      script.src = url;
      script.onload = script.onreadystatechange = function () {
        if (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") {
          callback && callback();
          script.onload = script.onreadystatechange = null;
        }
      };
      document.querySelector("html").appendChild(script);
    },
  },
};
</script>
<style lang="scss" >
body {
  top: revert !important;
}

.skiptranslate iframe {
  display: none;
}

.goog-te-gadget {
  height: 50px;
  overflow: hidden;
  pointer-events: none;

  .goog-te-combo {
    pointer-events: auto;
    box-sizing: border-box;
    padding: 10px;
    background-color: white;
    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
    border-radius: 4px;
    margin-bottom: 10px !important; //把“由Google强力驱动”几个字隐藏掉
  }
}
</style>

用例

<template>
  <div>
    <sgGoogleTranslate />
    <br><br>
    <p> 我一路向北,离开有你的季节,你说你好累,已无法再爱上谁。风在山路吹,过往的画面全都是不对,细数惭愧,我伤你几回。 </p>
    <br>
    <p> 我想我是太过依赖,在挂电话的刚才,坚持学单纯的小孩,静静看守这份爱,知道不能太依赖,怕你会把我宠坏,你的香味一直徘徊,我舍不得离开。 </p>
    <br>
    <p> 缓缓飘落的枫叶像思念,为何挽回要赶在冬天来之前,爱你穿越时间,两行来自秋末的眼泪,让爱渗透了地面我要的只是你在我身边。 </p>
  </div>
</template>
  
<script>
import sgGoogleTranslate from "./sgGoogleTranslate";
export default { components: { sgGoogleTranslate, }, }; 
</script>

最原始的多国语言方法一分钟上手Vue VueI18n Internationalization(i18n)多国语言系统开发、国际化、中英文语言切换!_你挚爱的强哥的博客-CSDN博客这里以Vue2为例子。https://blog.csdn.net/qq_37860634/article/details/132250859

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

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

相关文章

图解曲线积分的对称性

1.图解曲线积分的对称性 1.1 第一类曲线积分的一般对称性 二重积分、三重积分、第一类曲线积分、第一类曲面积分的一般对称性其原理都类似 平面曲线和空间曲线的原理一样&#xff0c;以下内容以空间曲线为例 图中所示为积分区域 Γ \Gamma Γ&#xff0c;函数 f ( x , y , z…

利用 Python PyPDF2库轻松提取PDF文本(及其他高级操作)

当需要从PDF文件中提取文本时&#xff0c;Python中的PyPDF2库是一个非常有用的工具。无论您是需要分析PDF文档中的内容还是需要在文档中搜索特定的信息&#xff0c;PyPDF2都可以帮助您轻松实现这些任务。 在本文中&#xff0c;我们将探讨如何使用PyPDF2库提取PDF文件中的文本&…

vue学习之vue cli创建项目

安装 node.js https://nodejs.org/en 安装 vue cli npm install -g @vue/cli --registry=https://registry.npm.taobao.org创建项目 执行创建命令,回车vue create vue-cli-learning选择 “Manually select features”,回车 “空格” 关闭 Linter / Formatter 选项,回车

开源库源码分析:OkHttp源码分析(二)

开源库源码分析&#xff1a;OkHttp源码分析&#xff08;二&#xff09; 导言 上一篇文章中我们已经分析到了OkHttp对于网络请求采取了责任链模式&#xff0c;所谓责任链模式就是有多个对象都有机会处理请求&#xff0c;从而避免请求发送者和接收者之间的紧密耦合关系。这篇文章…

【数据结构】链表面试题

203.移除链表元素 206.反转链表 876.链表的中间结点 牛客.链表中倒数第k个结点 21.合并两个有序链表 牛客.链表分隔 牛客.链表的回文结构 160.相交链表 141.环形链表 142.环形链表2 1. 移除链表元素 题目描述 思路&#xff1a; 定义一个指针cur遍历整个链表&#xff0c;一个ta…

阿里云 linux 的nginx 配置uni-app的H5前端项目vue,后端接口阿里云。

背景 vue项目调用接口是阿里云的&#xff0c;H5网站也要部署到阿里云&#xff0c;2个不同的服务器&#xff0c;需要做nginx部署与api代理。 端口配置 首先当然是买个阿里云服务器&#xff0c;这里是配置是linux系统&#xff0c;配置访问的域名 &#xff0c;再接着&#xff1…

【李沐深度学习笔记】数据操作

本课观看地址 数据操作p1 N维数组样例 N维数组是机器学习和神经网络的主要数据结构 1-d向量就是样本的各特征抽象成一个向量&#xff1b;2-d矩阵的每一行是一个样本&#xff0c;每一行都是一个样本的特征向量 3-d可以表示RGB图片&#xff0c;RGB图像是一个三维数组&#xff…

MarkText如何实现图床-解决md上传到csdn图片不显示的问题

安装picgo-core-这样做无法自动上传截图 npm install picgo -g配置-此处以github为例 picgo set uploader github生成token settings>Developer settings>Personal access tokens>Token(classic) 配置MarkText 点击左下角的设置在弹出的窗口后选择左边的Image在右…

学习Bootstrap 5的第十三天

目录 提示框 如何创建提示框 实例 指定提示框的位置 实例 弹出框 如何创建弹出框 实例 指定弹出框的位置 实例 关闭弹出框 实例 提示框 提示框是一个小小的弹窗&#xff0c;在鼠标移动到元素上显示&#xff0c;鼠标移到元素外就消失。 如何创建提示框 Bootstrap…

VIRTIO-SCSI代码分析(2)VIRTIO 驱动分析

QEMU模拟出VIRTIO SCSI设备后&#xff0c;在虚拟机中呈现SCSI设备和PCIE设备。而在虚拟机中&#xff0c;PCIE设备与VIRTIO PCI驱动匹配触发virtio_pci_probe()注册生成virtio设备&#xff0c;而virtio设备与虚拟机中的virtio驱动匹配触发对应probe函数最终注册对应的驱动。 这里…

T5 和 mT5

T5Architecture&#xff1a;The Best One1. Main Body2. Embedding3. Pertrain and Finetune4. Multi-Task Pertrain and Finetune5. T5总结 mT5 T5&#xff1a;https://arxiv.org/pdf/1910.10683.pdf T5 blog: https://ai.googleblog.com/2020/02/exploring-transfer-learning…

无涯教程-JavaScript - AGGREGATE函数

描述 返回列表或数据库中的聚合。 AGGREGATE函数可以将不同的聚合函数应用于列表或数据库,并且可以选择忽略隐藏的行和错误值。 AGGREGATE函数具有两种不同的格式- 参考格式数组格式 参考格式 语法 AGGREGATE (function_num, options, ref1, [ref2] …)争论 Argument描述…

Linux驱动中断与时间篇——中断下半部的三种方法

文章目录 什么是中断下半部softirq软中断实例 tasklettasklet使用tasklet实例 work queue 什么是中断下半部 当产生一个中断时&#xff0c;会进入中断处理程序。 但中断处理程序必须快速、异步、简单的对硬件做出迅速响应并完成那些时间要求很严格的操作。 因此&#xff0c;对…

课程学习成绩评分F2计算器

前言&#xff1a; 由于大二的时候计算成绩太麻烦了&#xff0c;特别是综测评定小组还需要验证其他同学的是否正确&#xff0c;对于这种重复性高的工作&#xff0c;首先要想到的就是用计算机来实现&#xff0c;想起来上学期学了一点Java&#xff0c;就想简单的写一个程序。 C …

【PowerQuery】PowerBI Pro账户的自动刷新

在数据和模型通过发布或者上传方式上传到PowerBI Pro中,如何来进行数据刷新呢?数据源依然在本地,而数据模型已经发布到PowerBI Pro云端服务中。如果数据源更新,我们的模型如何进行自动刷新呢? PowerBI Pro如果需要基于本地数据源更新进行模型更新需要部署相应的数据网关服…

Pytorch学习笔记(模型训练)

模型训练 在同一个包下创建train.py和model.py&#xff0c;按照步骤先从数据处理&#xff0c;模型架构搭建&#xff0c;训练测试&#xff0c;统计损失&#xff0c;如下面代码所示 train.py import torch.optim import torchvision from torch import nn from torch.utils.da…

Leetcode165. 比较版本号

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码如下&#xff1a; class Solution {public int compareVersion(String version1, String version2) {int i 0, j 0;while(i < version1.length() || j < version2.length()){long num1 0…

交换两数整有几种途径

原本以为利用变量或者异或可以交换两个整数&#xff1b;今天学到&#xff0c;加减也可以实现两个整数的交换。 (本笔记适合熟悉一种编程语言的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程…

嵌入式网络接口之MAC芯片与PHY芯片

目录 0. 参考文档 1.嵌入式网络接口简介 2.嵌入式网络硬件架构方案 2.1 SOC内未集成MAC芯片 2.2 SOC内集成MAC芯片 2.3 主流方案总结 2.3 参照实际网卡的说明 3.MII/RMII及MDIO接口 3.1 MII 3.2 RMII 3.3 MDIO 0. 参考文档 网卡构造&#xff1a;MAC与PHY的关系&…