Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CodeIgniter SEO-每种语言一个URL_Php_Codeigniter_Localization_Seo - Fatal编程技术网

Php CodeIgniter SEO-每种语言一个URL

Php CodeIgniter SEO-每种语言一个URL,php,codeigniter,localization,seo,Php,Codeigniter,Localization,Seo,我正在建立一个网站,我决定使用codeIgniter作为框架。我的网站在发布时将被翻译成两种语言,以后可能会更多。我的网站将是简单的,包括这些功能:创建一个帐户,登录,浏览教程/常见问题解答页面 我想我的网址是简单的,并在每种语言,使它更容易在人眼,搜索引擎也 英语: 我的网站/注册 法语: 我的网站/题词 使用此设置,我需要为routes.php中的每个页面设置一个路由 $route['default_controller'] = 'home'; // SIGN UP $route['sign

我正在建立一个网站,我决定使用codeIgniter作为框架。我的网站在发布时将被翻译成两种语言,以后可能会更多。我的网站将是简单的,包括这些功能:创建一个帐户,登录,浏览教程/常见问题解答页面

我想我的网址是简单的,并在每种语言,使它更容易在人眼,搜索引擎也

英语:
我的网站/注册
法语:
我的网站/题词

使用此设置,我需要为routes.php中的每个页面设置一个路由

$route['default_controller'] = 'home';
// SIGN UP
$route['signup'] = 'signup_c/main/english';
$route['inscription'] = 'signup_c/main/french';
我想知道这是否是一个正确的方法,因为我不会有太多的页面,我需要为每个页面/语言添加一个路由。 另外,如果我需要在每个页面上提供一个链接,允许用户更改当前语言,那么最好的方法是什么?我考虑使用一个文件,用每种语言存储特定页面的所有URL,并显示一个组合框,其中包含除当前页面语言之外的所有这些页面的链接

$signup_url = array(
'english' => 'signup',
'french' => 'inscription'
);

在a/language/[language\u here]/url\u lang.php中 但我不确定如果我把它放在那里,我怎么能在所有的URL上迭代


谢谢你指导一个新手!:)

使用国际化库可能是最好的方法。使用路由和不同的控制器功能将变得相当笨拙-将不同的语言与逻辑分开可能更容易理解和维护

CodeIgniter有几个国际化库,包括:


标准语言也值得一看。

谢谢你的建议

然而,我不认为我想使用一个大的国际化库来满足我的需要。 这将是一些额外的工作,但管理它自己真的很简单,我更喜欢知道我的代码

以下是我所做的工作

控制器:

public function index($lang)
{
    $changeLangLink = array(
                "english"=>"signup",
                "french"=>"inscription");
    $data['title'] =  lang("title_page_signup");
    $data['lang'] = $lang;
    $data['changeLangLink'] = $changeLangLink;

    $this->load->view('templates/header', $data);
    $this->load->view('pages/signup', $data);
    $this->load->view('templates/footer');
}
视图(标题):

<html>
<head>
    <title><?php echo $title ?> </title>
</head>
<body>
    <select name="curr_lang" ONCHANGE="location = this.options[this.selectedIndex].value;">
        <option value="<?php echo $changeLangLink['english']; if ($lang == 'english') echo "\" selected=\"selected";  ?>">English</option>
        <option value="<?php echo $changeLangLink['french'];  if ($lang == 'french')  echo "\" selected=\"selected";  ?>">Fran&ccedil;ais</option>
    </select>


你可以阅读。只需创建一个通用的登录页面,最好在URL中包含语言代码,但不要翻译操作名称。例如user/signup/en和user/signup/fr比user/signup和user/edinting更好。只使用语言代码获取正确的语言文件,并保持所有其他内容不变。在URL中包含语言代码真的更好吗?我想看看这种方法的优点/缺点。至于动作名称的翻译,我看到一位专业人士,他让用户更好地理解URL,并用他们搜索的语言在搜索引擎中直接搜索结果。请告诉我为什么你认为在URL中使用语言代码更好,谢谢!为了澄清,我的url应该是:www.website.com/signup www.website.com/edinting似乎比在英语动作中使用语言代码更短更好?谢谢你的建议。我不确定是否要使用大型国际化库。我有一个目前有效的解决方案。我在每个页面的标题中生成一个特殊的html选择,这个选择链接到同一页面的其他语言版本。我会发布我的答案,但这需要8小时,因为我的声誉很低;)非常感谢。
<html>
<head>
    <title><?php echo $title ?> </title>
</head>
<body>
    <select name="curr_lang" ONCHANGE="location = this.options[this.selectedIndex].value;">
        <option value="<?php echo $changeLangLink['english']; if ($lang == 'english') echo "\" selected=\"selected";  ?>">English</option>
        <option value="<?php echo $changeLangLink['french'];  if ($lang == 'french')  echo "\" selected=\"selected";  ?>">Fran&ccedil;ais</option>
    </select>