如何使用i18n使用漂亮的网址制作一个网站?

时间:2018-11-23 19:57:58

标签: javascript apache url-rewriting i18next pretty-urls

首先,我阅读了这个问题,在我看来,这个问题与解决我的问题相对应,但是经过多次重新阅读和测试后,我不理解它:https://github.com/i18next/react-i18next/issues/325 (也许是因为我没有使用React)

我也尝试过使用.htaccess进行此操作:https://github.com/i18next/i18next/issues/144

但是它给出了404错误。

我最近尝试使用i18next创建一个站点,该站点运行正常,但我希望能够使用国家/地区代码添加更好的URL。


示例而不是(更改语言):

https://www.mywebsite.com/index.html?lng=fr-BE

这个

https://www.mywebsite.com/fr-BE


知道我不能使用PHP等后端语言,而是使用Apache Web服务器,并且仅将i18next与jquery.i18next一起使用。

为了更深入地描述我的问题,我如何确保用户到达任何页面时都会添加国家代码? 如果网址中已经有国家/地区代码,该怎么更改用户的语言?

最重要的是,有可能吗?

感谢您阅读我的问题,希望您能帮助我解决我的问题。 :)

P.S .:请原谅我的英语

1 个答案:

答案 0 :(得分:0)

完全可能。

因此,首先在您的.htaccess文件中,您需要具有以下内容:

RewriteEngine On
RewriteRule ^(\w+)\/?([\w\-]+)?$ $1.html?lng=$2

这将重写格式

的URL

www.example.com/index/fr-BE www.example.com/index.html?lng=fr-BE

所以我正在使用这种方法,因为您可能要考虑将language参数视为可选参数并将其默认设置为某个值。而且此规则还将重定向

www.example.com/some_pag e到 www.example.com/some_page.html

就是使用友好的URL。现在,从查询字符串中获取语言参数。如果不使用服务器端语言(例如PHP),则不能使用'lng'参数的值,但是按照here的指南,您可以使用window.location.pathname获取语言字符串(如果存在) 。

因此,对于 www.example.com/index/fr-BE 格式的URL,您可以使用以下代码:

let params = window.location.pathname.split('/').slice(1);

if(typeof params[1] !== 'undefined') {
    console.log(params[1]); // <-- should be 'fr-BE'
    i18next.setLng(params[1]);
}

希望这会有所帮助。