我不建议使用 javascript 生成 url,而是使用 rel="alternative" 和 hreflang="code" 将每个页面上的链接链接到相应的翻译页面,其中语言代码对应于所示的 2 字母语言代码标准在http://googlewebmastercentral.blogspot.mx/2010/09/unifying-content-under-multilingual.html
中指示机器人页面是不同语言的相同内容。
如果您可以使用一些 php 或服务器端代码,您可以通过将 url 替换为您尝试从当前 url 创建的新 url 来非常轻松地创建链接引用。这是通过使用与您的 url 重写标准完全匹配的模式来完成的,也就是说,如果您没有任何模式,最好将每个链接 url 设置为每页分开。
假设您只需要将英语站点域转换为威尔士站点和新闻路径段即可。根据http://reference.sitepoint.com/html/lang-codes,威尔士语 2 字母标准将是“cy”。
<?php
$lang['cy']['domain'] = 'welsh-site';
$lang['cy']['lang'] = 'Welsh';
$lang['cy']['news_slug'] = 'newyddion';
$lang['en']['domain'] = 'english-site';
$lang['en']['lang'] = 'English';
$lang['en']['news_slug'] = 'news';
$lang['default'] = 'en';
解释:
我们正在定义一系列语言,我们将在其中设置我们需要翻译的任何内容。这是一个多维数组映射,它在第一维中通过键定义每种语言,然后在第二维中定义要翻译的每个段。在第二个维度中,我们将设置以 _slug 结尾的特殊键,这将是要翻译的 url 的一部分。这个数组可以保存在一个特殊的文件中,除了其他任何东西,我们可以轻松地去哪里编辑,而无需我们修改核心代码。
定义初始语言设置后,现在您需要代码来识别当前语言和路径:
<?php
include('lang.php'); //this is the file where the language array is defined
$path = $_SERVER['REQUEST_URI'];
$host = isset($_SERVER['HTTP_HOST']) ? substr($_SERVER['HTTP_HOST'], 0, strpos($_SERVER['HTTP_HOST'], ':')) : $_SERVER['SERVER_NAME'];
foreach ($lang as $code => $l) {
if ($l['domain'] == $host) {
$current_lang = $code;
break;
}
}
if ( ! isset($current_lang)) {
$current_lang = $lang['default'];
}
$_ = $lang[$current_lang];
$segment_1 = reset(explode('/', trim($path, '/'));
foreach ($lang[$current_lang] as $section => $url_segment) {
if ($segment_1 == $url_segment && substr($section, -5) == '_slug')
$current_section = $section;
break;
}
}
解释:
此代码用作获取当前部分和语言的桥梁代码。首先我们获取主机(域名)和url路径。在第一个循环中,我们匹配任何语言域以找到正确的语言,然后在第二个循环中,我们尝试找到与当前语言相关的当前部分。
现在用一些代码来编写使用已知信息的链接:
<head>
<?php foreach ($lang as $code => $l): ?><?php if ($code != $current_lang) : ?>
<?php $lang_path = isset($current_section) ? str_replace('/' . $_[$current_section] . '/', '/' . $l[$current_section] . '/', $path) : $path; ?>
<?php $lang_url = '//' . $l['domain'] . $lang_path; ?>
<link rel="alternative" hreflang="<?php echo $code; ?>" href="<?php echo $lang_url; ?>">
<?php endif; ?><?php endforeach; ?>
</head>
解释:
我们正在添加链接,这些链接将告诉机器人您页面中的其他链接只是该页面以不同语言的不同表示。我们还在 hreflang 属性中指定语言代码 ( http://googlewebmastercentral.blogspot.mx/2010/09/unifying-content-under-multilingual.html )
然后以完全相同的方式创建链接(在某处的正文部分):
<ul>
<?php foreach ($lang as $code => $l): ?>
<?php if ($code != $current_lang) : ?>
<?php $lang_path = isset($current_section) ? str_replace('/' . $_[$current_section] . '/', '/' . $l[$current_section] . '/', $path) : $path; ?>
<?php $lang_url = '//' . $l['domain'] . $lang_path; ?>
<li><a href="<?php echo $lang_url; ?>"><?php echo $l['lang']; ?></a></li>
<?php else : ?>
<li class="active"><?php echo $l['lang']; ?></li>
<?php endif; ?>
<?php endforeach; ?>
</ul>
要使所有这些工作,您的服务器必须支持 PHP 扩展。我使用了 php 代码,因为这是最常见的代码支持。
您还需要将文件扩展名从 .html 更改为 .php 才能正常工作。
希望对你有效。这可能不是您想要的,而是您真正需要的。