1

晚上所有。

这是我在这里发表的第一篇文章,所以我希望我做对了。

我到处寻找(在这个网站和其他地方),寻找我遇到的问题的解决方案,但我找不到任何听起来像我的问题的东西,但我知道从逻辑上讲它应该是可行的!

我维护两个 Intranet 站点 - 一个英语站点和一个威尔士站点。它们是彼此的镜像,只是域名和站点名称发生了变化:

例子

  http://english-site/news/item/003/170314.htm
  http://welsh-site/newyddion/item/003/170314.htm

到目前为止,我只发现了这个: http: //www.codingforums.com/javascript-programming/8523-how-do-i-switch-pages-automatically.html

这给了我一些希望,但我不知道如何将其应用于我的情况。

所以,问题是这个 - 有没有办法编辑和重新加载超链接切换出这个:

英文网站/新闻/

为了这:

威尔士网站/newyddion/

但保持链接的其余部分相同,以便页面加载与其自身相同的威尔士语或英语。

我知道大多数现代 CMS 可以自动执行此类操作...但我没有使用现代 CMS...我正在使用 FrontPage...我确定这是可能的,但找不到任何与我一致的地方!

提前为任何人提供的帮助而欢呼!

4

3 回答 3

0

我假设您的页面有一个按钮/链接/选择事件,该事件会触发您想要服务的域,说出EnglishWelsh。鉴于这种情况,您可以执行如下所示的简单 javascript 替换:

if (selection === "blah blah"){
    domain = "http://domainA...";
} else {

    domain = "http://domainB...";
}


window.location.replace(domain);

参考

于 2014-03-17T21:34:50.373 回答
0

FrontPage 是古老的,你真的不应该使用它。

话虽如此,这部分 JS 应该做你想做的事:

window.location.href = "http://welsh-site/newyddion" + window.location.pathname.substring(window.location.pathname.indexOf('/', 1));

当前页面的路径(域名后面的所有内容)都可以使用window.location.pathname. 使用indexOf('/', 1)on this 为我们提供了第一个字符在字符串中的位置(从 0 开始)/(我们1作为第二个参数传递以忽略起始斜杠)。然后我们使用 substring 来获取从那个字符开始的所有内容。

最后,我们将新 URL 设置为window.location.href,这将执行重定向。

您可以使用正则表达式来做到这一点,但这也同样有效。

于 2014-03-17T20:29:03.207 回答
0

我不建议使用 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 才能正常工作。

希望对你有效。这可能不是您想要的,而是您真正需要的。

于 2014-03-17T22:45:36.907 回答