多语言(Multi Language)
多语言定义为在您的网站中使用不同的语言。 我们将学习不同的程序,以帮助您在Grav站点中使用多语言。
多语言基础知识
基本上Grav需要一个.md文件来表示任何页面。 启用多语言支持时,它将查找default.en.md或default.fr.md.等文件default.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文件。
Example
default.en.md文件
---
title: Home
---
# Grav is Running!
## You have installed **Grav** successfully
上面的代码将生成以下输出 -
对于法语作为默认语言,default.fr.md文件将为 -
---
titre: Accueil
---
# Grav est en marche!
## Vous avez installé ** ** Grav succès
上面的代码将生成以下输出 -
通过URL激活语言
如果您想使用语言代码更新网站的网址,请按以下步骤操作 -
Example
如果您希望自己的网站使用英文,请在浏览器中输入以下内容 -
http://www.mysite.com/en
如果您希望自己的网站使用法语,请在浏览器中输入以下内容 -
http://www.mysite.com/fr
通过浏览器激活语言
Grav能够获取http_accept_language值并将它们与当前支持的语言进行比较。 如果您希望此功能正常运行,请在语言部分启用您的user/system.yaml文件 -
language :
http_accept_language : true
Language-Based Homepage
要拥有基于语言的主页,您必须在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
基于语言的树枝模板
如果您的文件是default.en.md ,那么Grav将查找twig文件default.html.twig 。 当您需要特定于语言的twig文件时,必须在语言文件夹的根级别上载它。 如果您当前的主题位于templates/default.html.twig ,则必须创建templates/en/文件夹,并将特定于英语的文件夹放在其中: templates/en/default.html.twig
语言切换器
Grav Package Manager(GPM)提供语言切换器插件。
通过Twig翻译
使用twig filter和t()函数。 两者功能相似。 如果你有另一个twig文件,那么它允许你从一个数组转换。
插件和主题语言翻译
通过在主题或插件的根目录(/user/plugins/error/languages.yaml)中创建languages.yaml文件,提供插件和主题的翻译,并且必须包含所有支持的语言。
翻译覆盖
如果要覆盖转换,则必须将值对放在user/languages/文件夹中的语言文件中。
Advanced
Environment – Based Language Handling
可以根据URL将用户路由到您站点的正确版本。 如果您的站点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
然后只需添加您想要的语言即新网址。
/en/blog/custom/my-page
翻译支持
Grav提供了简单的机制,通过PHP在Twig中提供翻译,用于主题和插件。 它默认启用,如果没有定义特定语言,则使用en语言。 要启用或禁用,请转至system.yaml文件并进行更改。
languages:
translations: true
您可以通过多种方式和不同的地方提供翻译。 首先是系统/语言文件夹。 必须以en.yaml , fr.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
Session Based Active Language
您可以激活活动语言的基于会话的存储。 要启用,您必须在system.yaml中具有session : enables : true enable session : enables : true并启用语言设置。
languages:
session_store_active: true
Language Switcher
从GPM安装语言切换插件。
Setup with language specific domains
使用基于环境的语言处理配置来分配默认语言。 将此选项添加到system.yaml; 它必须设置为true。
pages.redirect_default_route: true
将以下内容添加到.htaccess文件中,并根据您的要求选择语言slugs和域名。
# 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]