首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >网络翻译-单一或单独的文件为不同的语言?

问网络翻译-单一或单独的文件为不同的语言?
EN

Stack Overflow用户
提问于 2017-05-04 06:51:45
回答 3查看 283关注 0票数 0

短描述

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

这将是工作列表网站,所以内容不应该被翻译。如果雇主以英语提供工作,则即使选择了立陶宛语,也应使用英语。应该只翻译字段名、按钮和错误消息。

简略的问题

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

1路

所以我可以用几种方式来做,例如:

代码语言:javascript
复制
www.mysite.com/jobs -- default Lithuanian language
www.mysite.com/en/jobs -- English language

那么,在这种情况下,我需要有两个重复的网站(刚刚翻译),立陶宛存储在根/文件夹和英语存储在根/en/文件夹?所以,如果我在立陶宛网站上做了什么改变,我需要在英语网站上做准确的修改?

编写两次代码似乎不是很好的实践。

第二路

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

代码语言:javascript
复制
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总是会像下面这样吗?

代码语言:javascript
复制
www.mysite.com/jobs.php?lang=en
www.mysite.com/jobs.php?lang=lt

也许还有另外一种方法,根本不用在地址栏中显示语言选择?或者隐藏语言选择表格地址栏是不好的做法?

附加

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

代码语言:javascript
复制
<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)"/>

那么错误信息的翻译呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-11 06:28:36

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

en.php

代码语言:javascript
复制
return [
  "somekey" => "English Translation"
];

lt.php

代码语言:javascript
复制
return [
  "somekey" => "Lithunian Translation"
];

然后,如果您想要某种目录结构,或者简单的查询参数或cookie(正如其他人所指定的),您可以重写以从url获取语言。如果您正在使用任何RESTfull服务,也可以在header中设置它。还有许多框架可以帮助您从url中解析数据。

$langCode是从查询PAram、url路径、标头或cookie获取的语言代码。

在使用exists提取翻译资源之前,还可以使用require_once检查翻译文件是否可用。

一旦你得到了语言代码,你就可以直接使用

代码语言:javascript
复制
$stringResource = require_once "lang/{$langCode}.php";

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

代码语言:javascript
复制
    <?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路径

代码语言:javascript
复制
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路径做这件事会很好。

票数 1
EN

Stack Overflow用户

发布于 2017-05-04 07:13:15

我认为使用数据库的方法是好的。当您想要更改某些内容的翻译时,您只需编辑表条目。您可以编写一个类作为翻译,所以您只需传递语言id和语言。

如何保存语言/如何显示语言:这取决于语言的使用方式。如果人们经常与您的站点共享链接,您可以在网址中包含该语言,例如作为GET参数。如果它应该“只是”保持不变的用户谁访问网站,cookie是一个很好的方法。

票数 0
EN

Stack Overflow用户

发布于 2017-05-04 07:16:33

使用cookie存储语言首选项是一种选择,但可能会给SEO带来一些问题,这将与工作站点相关。

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

只使用查询参数,就像您的第二个建议也会起作用一样,但看起来不太好。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43775829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档