短描述
这将是立陶宛-英语网站(只有2种语言)。
这将是工作列表网站,所以内容不应该被翻译。如果雇主以英语提供工作,则即使选择了立陶宛语,也应使用英语。应该只翻译字段名、按钮和错误消息。
简略的问题
有什么更好的方法可以为两种语言拥有一个文件index.php,或者为LT和EN语言创建单独的文件呢?
1路
所以我可以用几种方式来做,例如:
www.mysite.com/jobs -- default Lithuanian language
www.mysite.com/en/jobs -- English language那么,在这种情况下,我需要有两个重复的网站(刚刚翻译),立陶宛存储在根/文件夹和英语存储在根/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查询中使用变量,则可以注入它。
3路
也许这是将字段名存储在数组中的更好方法(可能会有150+字段)?
如果我选择第二或第三条路,我应该在cookie中保留语言选择吗?那么,这样的网站url总是会像下面这样吗?
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)"/>那么错误信息的翻译呢?
发布于 2017-05-11 06:28:36
与数据库方法一样,您可以为每种语言和翻译使用静态文件。
en.php
return [
"somekey" => "English Translation"
];lt.php
return [
"somekey" => "Lithunian Translation"
];然后,如果您想要某种目录结构,或者简单的查询参数或cookie(正如其他人所指定的),您可以重写以从url获取语言。如果您正在使用任何RESTfull服务,也可以在header中设置它。还有许多框架可以帮助您从url中解析数据。
$langCode是从查询PAram、url路径、标头或cookie获取的语言代码。
在使用exists提取翻译资源之前,还可以使用require_once检查翻译文件是否可用。
一旦你得到了语言代码,你就可以直接使用
$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'] ;?>"/>您只需在编辑器中编辑翻译即可。不需要连接到数据库,因为它只是assoc数组。这样会快得多。
查询:
Www.mysite.com/ term s.php?lang=en,如前所述,它在SEO方面将被忽略。爬行器忽略查询参数。
URL路径
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有好处。
Cookies
将不会显示在地址栏中。但这也意味着,如果链接是共享给另一个用户,他们将看不到原始语言,他们将看到默认的语言。
根据谷歌文档,https://support.google.com/webmasters/answer/182192?hl=en#1。我相信使用url路径做这件事会很好。
发布于 2017-05-04 07:13:15
我认为使用数据库的方法是好的。当您想要更改某些内容的翻译时,您只需编辑表条目。您可以编写一个类作为翻译,所以您只需传递语言id和语言。
如何保存语言/如何显示语言:这取决于语言的使用方式。如果人们经常与您的站点共享链接,您可以在网址中包含该语言,例如作为GET参数。如果它应该“只是”保持不变的用户谁访问网站,cookie是一个很好的方法。
发布于 2017-05-04 07:16:33
使用cookie存储语言首选项是一种选择,但可能会给SEO带来一些问题,这将与工作站点相关。
如果不使用cookie,您可以按照您的建议将语言放在目录路径中。您不需要有两个单独的网站,您可以使用url重写将路径的一部分更改为查询参数(对于apache使用mod_rewrite)。
只使用查询参数,就像您的第二个建议也会起作用一样,但看起来不太好。
确保您为用户提供切换语言的选项,例如使用标志图标或仅使用文本链接。
https://stackoverflow.com/questions/43775829
复制相似问题