PWA 应用中的多语言处理方案

面试官:小伙子,你的数组去重方式惊艳到我了

由于互联网的快速发展,我们的用户群体已经越来越广泛。为了满足更多用户对多语言的要求,许多网站都必须提供多语言支持。那么在 PWA 应用中,该如何实现多语言处理呢?

困境

在传统网站上,多语言处理是由后端来完成的。但在 PWA 中,由于其本质上是前端应用,这就需要我们先通过 JavaScript 来处理多语言的展示,再将其渲染在浏览器中。然而,前端展示关键是语言文件的读取,这就要求我们必须确保语言文件能够被 PWA 应用也可以读取。现今大多数 PWA 应用是在移动端上使用的,这个时候单独为这个平台写语言文件显然是不够实际的。同时,由于 PWA 应用本身是一个离线应用,我们不能够直接从服务器端获取语言文件。真正的困境是,我们如何确保用户获取到了他想要的语言版?

需求

当我们开始考虑 PWA 处理多语言时,我们需要先确定我们所需的功能需求。这些功能如下:

  • 自由选择语言
  • 不需重新启动应用
  • 在离线状态下同样可查看数据

下面,我们开始进入实战,分别进行以下的方案实现。

当前所在位置:前端

方法一:基于 Web 的翻译 API

如果你的应用是基于 Web 服务的,那么第一种方案就最为合适。

  • 使用 Google 翻译 API

根据用户所在位置,来动态选择拥有该位置的语言,并利用 Google Translation API 实现翻译。Google 翻译 API 是一种高精度的翻译服务,而且支持多国语音。

-------- --------------- ----- -
  ----- --- - -----------------------------------------------------------
  ----- -------- - ---------------------------------
  ----------------------------------------------------------------------------------------
    --------- -- -----------
    ---------- -- -
      -- ------------ ------ ----
    --
    ---------- -- --------------------
-
  • 使用 Web Speech API

Google Chrome 浏览器支持 Web Speech API,这就意味着我们可以通过 API 在移动设备上转换语音。

----- --------- - -----------------------
----- ------ - ----------------------

-------- --------------- -
  ----- --------- - --- -------------------------------
  -------------- - ---------------------------- ---
  ---------------------------
-

方法二:读取内嵌云端文件

如果你的应用是不同的平台都可以使用的,也就是说,在任何平台上它的体验都应该是一模一样的,那么我们就要考虑内嵌语言文件了。

  • 将语言文件打包到应用中

之前我们已经提到,PWA 应用是离线应用,它的离线模式会将所有的网页、资源和样式都打包到本地缓存中。在这个包中我们也可以存储语言文件。同时,由于这个文件是存储在网络中的,当我们在应用中访问的时候,我们要使用 fetch 在应用中的 Service Worker 中将其读取出来。

--------------------
    -------------- -- -
      -- ------------- -
        -- ----- --- ----- --- --------
        ----- ------ - -----------------
        -----------------------
          ----------- -- -
            ------------------------ --------
          ---
        ------ ---------
      -
      ----- --- ---------- -------- -----
    --
    ---------- -- -
      -------------------
      ------ --------------------------
    ---
  • 应用本地化

JavaScript 库 i18next 可以将文本翻译成你所选择的语言。

------ ------- ---- ----------

--------------
  ---- ----- -- -----
  ------------ ----- -- ----
  ---------- -
    --- -
      ------------ -
        ------ ------ -------
      -
    --
    --- -
      ------------ -
        ------ -------
      -
    --
    ---
  -
--

---------------- -- --------

方法三:使用 PWA 有效调用 API

如果你的应用是基于 PWA 平台的,那么下面的方案就最为合适。

  • 通过 PWA 平台申请语言 API

通过申请 PWA 的语言 API 来处理多语言。

------------------- -- -------
------------------ -- ---------
  • 语言选择器

语言选择器能够随时更改用户当前的语言。这就意味着我们可以通过语言选择器,动态读取并调用服务器端的语言数据。当用户切换语言后,我们可以根据用户所选择的语言来渲染页面。

--------
  ------- ---------------------------
  ------- ---------------------------
  ------- ----------------------------
  ------- ----------------------
---------
----- ---------------- - ---------------------------------
----- --------------- - -----------------------
----- --- - --------------------------------------------------------------------------------

----------
  -------------- -- -
    -- ------ ----------- -----
  --
  ------------ -- -
    ---------------------
  ---

结论

PWA 应用中实现多语言应该分为三个阶段:

  • 第一步,我们应用中需要有语言数据,通过读取内嵌云端的语言文件,以及使用重讲将其翻译为用户所需的语言。
  • 第二步,为语言选择器增加支持,允许用户在任何时候进行更改。当语言选择器发生改变时,我们可以通过调用 API 来同步用户所选择的语言。
  • 第三步,对于固定文本,我们需要通过 JavaScript 库 i18next 进行本地化。

通过这些方法,我们可以很好地解决 PWA 应用中的多语言问题,并实现向更广泛用户群体提供更好的体验。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6704fb7ad91dce0dc85126e3


猜你喜欢

  • 如何在 PWA 中使用 Vue Router?

    PWA 即 Progressive Web App,是一种增强型 Web 应用程序。它的特点是体验和功能与原生应用程序类似,可以离线使用,减少服务器端的负担。Vue Router 是 Vue.js 官...

    10 天前
  • 使用 Hapi 框架建立 REST API

    在前端开发中,构建 REST API 能为后端开发与前端视图之间提供接口,极大地提高了应用的可扩展性和可维护性。Hapi 是一个采用 Node.js 编程语言的高度可扩展和灵活的 web 应用程序框架...

    10 天前
  • 让 Web Components 元素可访问

    随着 Web 技术的不断发展,Web Components 成为了一种越来越受欢迎的技术。Web Components 具有诸多优点,如可重用性、封装性等,已经成为前端工程师不可缺少的技能之一。

    10 天前
  • Docker 中运行多个服务的最佳实践

    引言 Docker 已经成为前端开发中运行和部署代码的标准工具之一。但是在实际使用中,我们可能需要同时运行多个服务,如何在 Docker 中实现多个服务的运行是前端开发者需要掌握的重要技能。

    10 天前
  • GraphQL-MongoDB:构建可观察性、可扩展性和性能的 GraphQL 模型

    GraphQL-MongoDB:构建可观察性、可扩展性和性能的 GraphQL 模型 GraphQL 是一种用于 API 的查询语言,可以让客户端精确地获得他们需要的数据,而不用获取不必要的数据。

    10 天前
  • Node.js 运行时出现错误,如何排除和解决?

    Node.js 是一种用于服务器端编程的 JavaScript 运行环境。作为前端开发人员,我们经常使用 Node.js 来构建 Web 应用程序、API 和其他服务。

    10 天前
  • 响应式设计中如何处理 SVG 的显示问题

    在前端开发中,我们经常使用 SVG (Scalable Vector Graphics) 作为矢量图像,因为它可以根据屏幕大小进行缩放而不会失真。在响应式设计中,我们需要处理不同屏幕大小上 SVG 的...

    10 天前
  • Deno 的 Web 框架 Oak 详解

    简介 最近,Node.js 开发社区的另一项替代品——Deno,在开发者之间引起了很大的反响。在 Deno 上面,我们可以使用开发 Web 应用程序的各种工具和框架。

    10 天前
  • PM2 使用时遇到 “pm2 start” 命令无法启动应用的解决方法

    前言 PM2 是一款非常流行的 Node.js 进程管理工具,可以帮助开发者启动、停止和监控 Node.js 应用程序。PM2 是一个强大的工具,但在使用过程中可能会遇到一些问题。

    10 天前
  • 用 CSS Flexbox 实现响应式布局遇到的常见问题及解决方案

    CSS Flexbox 是一种强大的布局方式,能够使我们更快速地实现响应式布局。然而,在实践过程中,我们仍然可能遇到一些问题。在本文中,我们将讨论一些常见的问题,并提供解决方案和示例代码。

    10 天前
  • 使用 Mocha + Sinon 实现 Node.js 服务的单元测试

    在开发 Node.js 服务应用的过程中,单元测试是不可或缺的一环。Mocha 是一种流行的 JavaScript 测试框架,而 Sinon 则是一个强大的测试辅助工具库,使用它们可以帮助我们更加轻松...

    10 天前
  • Material Design 下的表单设计教程

    Material Design 是一个非常有名的设计风格,它被许多应用程序和网站采用并得到广泛使用。表单设计是其中至关重要的一部分,因为它是与用户的互动交流最为紧密的一环。

    10 天前
  • 如何为无障碍用户提供更好的键盘访问体验

    在开发网站或应用程序时,我们通常考虑的是视觉外观和交互体验。但是,我们也需要考虑到一些用户可能无法使用鼠标或触摸屏等设备进行网页操作的情况,比如一些盲人用户、老年人或手部受伤患者等。

    10 天前
  • Cypress 测试框架中的调试技巧及方法

    前言 Cypress 可以让前端开发人员更加轻松地编写 Web 应用程序的端到端测试,它提供了友好的 API 和强大的工具,方便我们快速地构建及调试测试用例。然而,有时候在构建复杂的测试用例时,可能会...

    10 天前
  • 如何在 ES8 中使用字符串填充方法 padEnd()

    在 ES8 中,我们可以使用字符串填充方法 padEnd() 来在字符串结尾处增加填充字符。这对于前端开发人员来说是非常实用的,因为在某些情况下需要将字符串填充到特定的长度才能满足要求。

    10 天前
  • Express.js 中使用 Socket.IO 实现即时通讯

    随着互联网的发展,即时通讯已经成为了一种非常重要的应用场景。在前端开发中,使用 Socket.IO 可以非常方便地实现即时通讯的功能。本文将详细介绍如何使用 Socket.IO 实现即时通讯,并提供示...

    10 天前
  • React 高阶组件详解

    React 高阶组件 (Higher-Order Component, HOC) 是一种高阶函数,用于将组件逻辑复用。它不是 React API 的一部分,而是一种模式,通过这种模式,我们可以将多个组...

    10 天前
  • Promise 的优缺点及开发者需要注意的问题

    Promise 的优缺点及开发者需要注意的问题 Promise 是 JavaScript 异步编程的一种解决方案,它的出现大大降低了回调地狱的出现。本文将介绍 Promise 的优缺点以及开发者需要注...

    10 天前
  • 使用 React Router 构建 SPA 时遇到的 404 错误(及解决方案)

    前言 在使用 React Router 构建单页面应用时,我们经常会遇到 404 错误。这个错误通常发生在我们使用浏览器刷新页面或直接访问 URL 地址时。本篇文章将介绍什么是 SPA、为什么会出现 ...

    10 天前
  • 解决 Kubernetes 集群 DNS 问题的完美方案

    介绍 Kubernetes 是一个非常流行的容器编排系统,可以帮助我们管理和扩展应用程序的部署。然而,在使用 Kubernetes 时,可能会遇到 DNS 问题,例如域名解析失败,服务发现问题等。

    10 天前

相关推荐

    暂无文章