网络翻译 - 不同语言的单个文件或单独文件?
Web translating - single or separate files for different languages?
简短说明
这将是立陶宛语-英语网站(只有 2 种语言)。
这将是招聘信息网站,因此不应翻译内容。如果雇主提供的工作是英文的,那么即使立陶宛语是 selected,也应该是英文的。应仅翻译字段名称、按钮和错误消息。
简短问题
为两种语言创建单个文件 index.php 或为 LT 和 EN 语言创建单独文件的更好方法是什么?
第一种方式
所以我可以通过几种方式实现它,例如:
www.mysite.com/jobs -- default Lithuanian language
www.mysite.com/en/jobs -- English language
所以在这种情况下,我需要有 2 个重复的网站(刚刚翻译)立陶宛语存储在 root/ 文件夹中,英语存储在 root/en/ 文件夹中?因此,如果我在立陶宛语网站中更改某些内容,我需要在英语网站中进行精确更改吗?
写两次代码看起来不是什么好习惯。
第二种方式
创建类似于 $lang = "en";
的变量,以如下方式将所有字段名称存储在数据库中:
Id FieldName_lt FieldName_en
1 Vardas First Name
2 Pavardė Last Name
3 El. paštas E-mail
和 select 通过 PHP 来自数据库,就像 SELECT FieldName_ . $lang FROM table...
,但如果我在 SQL 查询中使用变量,它可能会被 SQL 注入。
第三种方式
也许在数组中存储字段名称是更好的方法(可能会有 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)"/>
那么如何翻译错误消息?
我认为数据库的方法很好。每当您想更改某些内容的翻译时,您只需编辑 table 条目。你可以写一个 class 来为你翻译,所以你只需要传递语言 ID 和语言。
如何保存语言/如何显示它:这取决于它的用途。如果人们很可能经常在您的网站上分享 link,您可以在 url 中包含语言,例如作为 GET 参数。如果它应该 "just" 对于访问该站点的用户保持不变,cookie 是一个不错的方法。
使用 cookie 来存储语言首选项是一种选择,但可能会导致 SEO 出现一些问题,这与求职网站相关。
在不使用 cookie 的情况下,您可以按照建议将语言放在目录路径中。你不需要有 2 个单独的网站,你可以使用 url 重写将路径的一部分更改为查询参数(对于 apache 使用 mod_rewrite)。
只使用一个查询参数,就像你的第二个建议一样,但看起来不太好。
确保为用户提供切换语言的选项,例如使用旗帜图标或仅使用文本链接。
与数据库方法相同,您可以为每种语言和翻译使用静态文件。
en.php
return [
"somekey" => "English Translation"
];
lt.php
return [
"somekey" => "Lithunian Translation"
];
如果您需要一些目录结构,或者简单的查询参数或 cookie(由其他人指定),您可以 mod 重写以从 url 获取语言。如果您使用任何 RESTfull 服务,也可以在 HTTP header 中设置它。还有许多框架可以帮助您开箱即用地解析来自 url 的数据。
$langCode
是从 Query PAram、url 路径、header 或 cookie
中获取的语言代码
您也可以在使用require_once拉取翻译资源之前使用http://php.net/file_exists检查翻译文件是否可用。
获得语言代码后即可使用
$stringResource = require_once "lang/{$langCode}.php";
然后你就可以通过$stringResource中的key获取所有的资源了。
<?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=zh-CN
如前所述,它将在 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
不会显示在地址栏中。但这也意味着如果 link 与其他用户共享,他们将看不到原始语言,他们将看到默认语言。
https://support.google.com/webmasters/answer/182192?hl=en#1 根据 google 文档。我相信使用 url 路径会很好。
简短说明
这将是立陶宛语-英语网站(只有 2 种语言)。
这将是招聘信息网站,因此不应翻译内容。如果雇主提供的工作是英文的,那么即使立陶宛语是 selected,也应该是英文的。应仅翻译字段名称、按钮和错误消息。
简短问题
为两种语言创建单个文件 index.php 或为 LT 和 EN 语言创建单独文件的更好方法是什么?
第一种方式
所以我可以通过几种方式实现它,例如:
www.mysite.com/jobs -- default Lithuanian language
www.mysite.com/en/jobs -- English language
所以在这种情况下,我需要有 2 个重复的网站(刚刚翻译)立陶宛语存储在 root/ 文件夹中,英语存储在 root/en/ 文件夹中?因此,如果我在立陶宛语网站中更改某些内容,我需要在英语网站中进行精确更改吗?
写两次代码看起来不是什么好习惯。
第二种方式
创建类似于 $lang = "en";
的变量,以如下方式将所有字段名称存储在数据库中:
Id FieldName_lt FieldName_en
1 Vardas First Name
2 Pavardė Last Name
3 El. paštas E-mail
和 select 通过 PHP 来自数据库,就像 SELECT FieldName_ . $lang FROM table...
,但如果我在 SQL 查询中使用变量,它可能会被 SQL 注入。
第三种方式
也许在数组中存储字段名称是更好的方法(可能会有 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)"/>
那么如何翻译错误消息?
我认为数据库的方法很好。每当您想更改某些内容的翻译时,您只需编辑 table 条目。你可以写一个 class 来为你翻译,所以你只需要传递语言 ID 和语言。
如何保存语言/如何显示它:这取决于它的用途。如果人们很可能经常在您的网站上分享 link,您可以在 url 中包含语言,例如作为 GET 参数。如果它应该 "just" 对于访问该站点的用户保持不变,cookie 是一个不错的方法。
使用 cookie 来存储语言首选项是一种选择,但可能会导致 SEO 出现一些问题,这与求职网站相关。
在不使用 cookie 的情况下,您可以按照建议将语言放在目录路径中。你不需要有 2 个单独的网站,你可以使用 url 重写将路径的一部分更改为查询参数(对于 apache 使用 mod_rewrite)。
只使用一个查询参数,就像你的第二个建议一样,但看起来不太好。
确保为用户提供切换语言的选项,例如使用旗帜图标或仅使用文本链接。
与数据库方法相同,您可以为每种语言和翻译使用静态文件。
en.php
return [
"somekey" => "English Translation"
];
lt.php
return [
"somekey" => "Lithunian Translation"
];
如果您需要一些目录结构,或者简单的查询参数或 cookie(由其他人指定),您可以 mod 重写以从 url 获取语言。如果您使用任何 RESTfull 服务,也可以在 HTTP header 中设置它。还有许多框架可以帮助您开箱即用地解析来自 url 的数据。
$langCode
是从 Query PAram、url 路径、header 或 cookie
您也可以在使用require_once拉取翻译资源之前使用http://php.net/file_exists检查翻译文件是否可用。
获得语言代码后即可使用
$stringResource = require_once "lang/{$langCode}.php";
然后你就可以通过$stringResource中的key获取所有的资源了。
<?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=zh-CN 如前所述,它将在 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
不会显示在地址栏中。但这也意味着如果 link 与其他用户共享,他们将看不到原始语言,他们将看到默认语言。
https://support.google.com/webmasters/answer/182192?hl=en#1 根据 google 文档。我相信使用 url 路径会很好。