Grav - 多语言

多语言是指在您的网站中使用不同的语言。我们将学习不同的程序,帮助您在 Grav 网站中使用多语言。

多语言基础知识

基本上,Grav 需要一个 .md 文件来表示任何页面。当您启用多语言支持时,它将查找 default.en.mddefault.fr.md. 之类的文件。

语言配置

您必须首先在 user/config/system.yaml 文件中设置一些基本的语言配置。

Language:
   Supported:
      - en
      - Fr

通过这样做,您已在 Grav 中启用了多语言支持。在上面的代码中,en 表示英语,fr 表示法语。这意味着您的网站将支持这两种语言。这里的默认语言是 en (English)。如果您先写 Fr (French),那么它将成为您的默认语言。

多语言页面

如果您的默认语言设置为 English,那么 Grav 将查找 default.en.md 文件。如果找不到该文件,那么 Grav 将查找您设置的另一种语言。如果两种语言都找不到,那么它会查找 default.md 文件。

示例

default.en.md 文件

---
title: Home
---

# Grav is Running!
## You have installed **Grav** successfully

上述代码将生成以下输出 −

Grav Multi Language

对于法语作为默认语言,default.fr.md 文件将是 −

---
titre: Accueil
---

# Grav est en marche!
## Vous avez installé ** ** Grav succès

上述代码将生成以下输出 −

Grav Multi Language

通过 URL 激活语言

如果您想使用语言代码更新网站的 URL,请按照以下步骤操作 −

示例

如果您希望您的网站使用英语,请在浏览器中输入以下行 −

http://www.mysite.com/en

如果您希望您的网站使用法语,请在浏览器中输入以下行 −

http://www.mysite.com/fr

通过浏览器

Grav 能够获取 http_accept_language 值并将其与当前支持的语言进行比较。如果您希望此功能发挥作用,请在语言部分启用您的 user/system.yaml 文件,如下所示 −

language :
   http_accept_language : true

基于语言的主页

要拥有基于语言的主页,您必须在 site.yaml 文件中启用以下代码 −

home:
   aliases:
      en: /homepage
      fr: /page-d-accueil

这样,Grav 将从活动语言中找出要使用的语言。

以下代码将强制 Grav 将您重定向到您的默认语言路由。并且 include_route 选项强制在您的网址中添加语言代码,如 http://www.mysite.com/en/home

languages:
   home_redirect:
      include_lang: true
      include_route: false

基于语言的 Twig 模板

如果您的文件是 default.en.md,那么 Grav 将查找 default.html.twig 形式的 twig 文件。当您需要特定于语言的 twig 文件时,您必须将其上传到语言文件夹的根级别。如果您当前的主题位于 templates/default.html.twig 中,则必须创建一个 templates/en/ 文件夹并将英语专用文件夹放入其中,如下所示:templates/en/default.html.twig

语言切换器

语言切换器插件可在 Grav 软件包管理器 (GPM) 中找到。

通过 Twig 进行翻译

使用 twig 过滤器和 t() 函数。两者功能类似。如果您有另一个 twig 文件,那么它允许您从数组中进行翻译。

插件和主题语言翻译

通过在主题或插件的根目录 (/user/plugins/error/languages.yaml) 中创建 languages.yaml 文件来在插件和主题中提供翻译,并且必须包含所有支持的语言。

翻译覆盖

如果您想覆盖翻译,那么您必须将值对放在 user/languages/ 文件夹中的语言文件中。

高级

基于环境的语言处理

可以根据 URL 将用户路由到您网站的正确版本。如果您的网站网址为 http://english.yoursite.com,这是标准网址 http://www.yoursite.com 的别名,那么您可以创建一个配置为 /user/english.yoursite.com/config/system.yaml..

languages:
   supported:
      - fr
      - en

它使用倒置的语言顺序。在上面的代码中,fr 是默认语言。如果您通过将 en 保持在顶部并将 fr 保持在底部来更改顺序,则 en 将成为默认语言。

语言别名路由

在同一页面的不同语言版本之间切换非常困难,您可以在页面对象上使用 Page.rawRoute() 方法。它为单个页面的不同语言翻译获取相同的原始路由。将语言代码放在前面以获取正确的路由。

如果您在法语页面上,则自定义路由为 −

/ma-page-francaise-personnalisee

英语页面的自定义路由为 −

/my-custom-french-page

您获得法语页面的原始页面,这可能是 −

/blog/custom/my-page

然后只需添加您想要的语言,这将是您的新 URL。

/en/blog/custom/my-page

翻译支持

Grav提供简单的机制,通过 PHP 在 Twig 中提供翻译,供主题和插件使用。默认情况下启用该机制,如果未定义特定语言,则使用 en 语言。要启用或禁用,请转到 system.yaml 文件并进行更改。

languages:
   translations: true

您可以通过多种方式在不同位置提供翻译。第一个位置是 system/languages 文件夹。文件必须以 en.yamlfr.yaml 等格式创建。每个 yaml 文件必须包含一个或多个密钥对的嵌套数组。

SITE_NAME: My Blog Site
HEADER:
   MAIN_TEXT: Welcome to my new blog site
   SUB_TEXT: Check back daily for the latest news

基于会话的活动语言

您可以激活基于会话的活动语言存储。要启用,您必须在 system.yaml 中设置 session : enable : true 并启用语言设置。

languages:
   session_store_active: true

语言切换器

从 GPM 安装语言切换插件。

使用特定于语言的域进行设置

使用基于环境的语言处理配置来分配默认语言。将此选项添加到您的 system.yaml;必须将其设置为 true。

pages.redirect_default_route: true

将以下内容添加到您的 .htaccess 文件,并根据您的要求选择语言 slug 和域名。

# http://www.cheat-sheets.org/saved-copy/mod_rewrite_cheat_sheet.pdf
# http://www.workingwith.me.uk/articles/scripting/mod_rewrite

# handle top level e.g. http://Grav-site.com/de
RewriteRule ^en/?$ "http://Grav-site.com" [R = 301, L]
RewriteRule ^de/?$ "http://Grav-site.de" [R = 301, L]

# handle sub pages, exclude admin path
RewriteCond %{REQUEST_URI} !(admin) [NC]
RewriteRule ^en/(.*)$ "http://Grav-site.com/$1" [R = 301, L]
RewriteCond %{REQUEST_URI} !(admin) [NC]
RewriteRule ^de/(.*)$ "http://Grav-site.de/$1" [R = 301, L]