网页翻译 - 针对不同语言的单个或单独文件?

时间:2017-05-04 06:51:45

标签: php sql arrays cookies multilingual

简短说明

它将是立陶宛语 - 英语网站(只有2种语言)。

这将是工作列表网站,因此不应翻译内容。如果雇主提供英语工作,那么即使选择了立陶宛语,这也应该是英语。应该只翻译字段名称,按钮和&错误消息。

短暂的问题

为两种语言创建单个文件index.php或为LT和EN语言创建单独的文件有什么更好的方法?

第一天

所以我可以通过几种方式制作它,例如:

www.mysite.com/jobs -- default Lithuanian language
www.mysite.com/en/jobs -- English language

所以在这种情况下,我需要有两个重复的网站(刚刚翻译)立陶宛语存储在root /文件夹中,英语存储在root / en /文件夹中?所以,如果我在立陶宛网站上更改某些内容,我需要在英文网站上进行更改?

两次编写代码看起来不太好。

第二种方式

创建类似$lang = "en";的变量,将所有字段名称存储在数据库中,如下所示:

Id    FieldName_lt      FieldName_en
1     Vardas            First Name
2     Pavardė           Last Name
3     El. paštas        E-mail 

并通过PHP从SELECT FieldName_ . $lang FROM table...中选择数据库,但它可能是SQL Injected如果我将在SQL查询中使用变量。

第三种方式

也许更好的方法是在数组中存储字段名称(可能会有150多个字段)?

如果我要去第二或第三路,我应该在cookie中保存语言选择吗?所以这样网站网址总是会像下面一样?

www.mysite.com/jobs.php?lang=en
www.mysite.com/jobs.php?lang=lt

也许有另一种方法可以制作它,而根本没有在地址栏中显示语言选择?或者隐藏语言选择形式地址栏是不好的做法?

其他

在HTML表单中,我正在使用以下数据验证:

<input type="text" id="first-name" placeholder="" required 
        data-validation="length alphanumeric" 
        data-validation-length="3-12" 
        data-validation-error-msg="User name has to be an alphanumeric value (3-12 chars)"/>

那么错误信息翻译怎么样?

2 个答案:

答案 0 :(得分:1)

与数据库方法相同,您可以为每种语言和翻译使用静态文件。

<强> en.php

return [
  "somekey" => "English Translation"
];

<强> lt.php

return [
  "somekey" => "Lithunian Translation"
];

如果你想要一些目录结构,或简单的查询参数或cookie(由其他人指定),你可以修改重写以从url获取语言。如果您正在使用任何任何RESTfull服务,也可以在HTTP标头中设置它。许多框架也可以帮助您从开箱即用的URL解析数据。

$langCode是从查询PAram,网址路径,标头或Cookie中提取的语言代码

在使用require_once提取翻译资源之前,您还可以使用http://php.net/file_exists检查翻译文件是否可用。

获得语言代码后,您只需使用

即可
$stringResource = require_once "lang/{$langCode}.php";

然后,您可以通过$ stringResource中的密钥获取所有资源。

    <?php $stringResource = require_once "lang/{$langCode}.php"; ;?>

<input type="text" id="first-name" placeholder="" required 
        data-validation="length alphanumeric" 
        data-validation-length="3-12" 
        data-validation-error-msg="<?php echo $stringResource['somekey'] ;?>"/>

您只需在编辑器中编辑翻译即可。不需要连接到数据库,因为它只是关联数组。它会更快。

<强>查询:

www.mysite.com/jobs.php?lang=en 如前所述,它将在SEO方面被忽略。爬虫会忽略查询参数。

网址路径

www.mysite.com/en/jobs.php

这里你需要做mod重写http://httpd.apache.org/docs/2.0/misc/rewriteguide.html这基本上只是捕获url并取出en部分并重写为www.mysite.com/jobs.php?lang=en

之类的东西

这两个数据都可以从$_GET['lang']获得。但是url路径对SEO有好处。

<强>缓存

不会在地址栏中显示。但这也意味着如果链接被共享给另一个用户,他们将看不到原始语言,他们将看到默认语言。

https://support.google.com/webmasters/answer/182192?hl=en#1根据谷歌文档。我相信用网址路径做它会很好。

答案 1 :(得分:0)

使用cookie存储语言首选项是一种选择,但可能会导致SEO的一些问题,这将与作业网站相关。

如果不使用cookie,您可以按照建议将语言放在目录路径中。您不需要拥有2个单独的网站,您可以使用网址重写将路径的一部分更改为查询参数(对于apache使用mod_rewrite)。

只使用查询参数,就像你的第二个建议也会起作用,但看起来不那么好。

确保为用户提供切换语言的选项,例如使用标记图标或仅使用文本链接。