两个简单的本地化PHP文件基本相同,但是一个不起作用? [英] Two simple PHP files for localization that do basically the same, but one doesn't work?

查看:63
本文介绍了两个简单的本地化PHP文件基本相同,但是一个不起作用?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用PHP回显的多语言内容(例如第17行)根本不会显示.

The multilingual content echoed with PHP (e.g. line 17) are not displayed at all.

localizatoin.php:

这一项有效:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

if(isSet($_GET['lang'])) {
    $lang = $_GET['lang'];

    // register the session and set the cookie
    $_SESSION['lang'] = $lang;
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang'])) {
    $lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang'])) {
    $lang = $_COOKIE['lang'];
}
else {
    $lang = 'en';
}

// use appropiate lang.xx.php file according to the value of the $lang
switch ($lang) {
case 'en':
    $lang_file = 'lang.en.php';
    break;

case 'es':
    $lang_file = 'lang.es.php';
    break;

case 'zh-tw':
    $lang_file = 'lang.zh-tw.php';
    break;

case 'zh-cn':
    $lang_file = 'lang.zh-cn.php';
    break;

default:
    $lang_file = 'lang.en.php';
}

//translation helper function
function l($localization) {
    global $lang;
    return $lang[$localization];
}

    include_once 'languages/'.$lang_file;
?>

这一个:

<?php
session_start();
header('Cache-control: private'); // IE 6 FIX

function get_lang(){
    if(!empty($_GET['lang'])) return $_GET['lang'];
    if(!empty($_SESSION['lang'])) return $_SESSION['lang'];
    if(!empty($_COOKIE['lang'])) return $_COOKIE['lang'];
    return 'en';
}

function set_lang($lang){
    setcookie("lang", $lang, time() + (3600 * 24 * 30));
    $_SESSION['lang'] = $lang;
}

function get_lang_file($lang){
    $lang_file = "languages/lang.$lang.php";
    if(file_exists($lang_file)) return $lang_file;
    if($lang_file = get_lang_file('en')) return $lang_file;
    return false;
}

//translation helper function
function l($string){
    static $localization;

    if(!isset($localization)){
        $lang = get_lang();
        $lang_file = get_lang_file($lang);
        if($lang_file) set_lang($lang);
        $localization = include $lang_file;
    }

    return $localization[$string];
}

?> 

显示以下错误:

Notice: Undefined variable: lang_file in D:\wamp\www\test2\localization0.1\index.php on line 17
(and so on)

languages/lang.en.php(示例):

<?php
$lang = array(
    'tagline_p' => "Hello!...",
(continues)

index.php(示例):

    <?php
include_once 'localization.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
    <meta name="robots" content="index, follow"/>
    <meta name="description" content="Web design and Translation / 網頁設計和翻譯" />
    <meta name="keywords" content="web development, web developer, web design, web designer, translation, translator, taiwan, taipei, taichung, english, chinese, spanish, 網站開發者, 網頁設計, 網頁設計師, 翻譯, 翻譯著, 台灣, 台北, 台中, 英文, 中文, 西班牙文, html, css, javascript, php" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"/>
    <title>Alex Chen - Web design and Translation / 網頁設計和翻譯</title>
    <link rel="stylesheet" type="text/css" href="styles/reset.css" />
    <link rel="stylesheet" type="text/css" href="styles/global.css" />
    <link rel="stylesheet" type="text/css" href="fancybox/jquery.fancybox-1.3.1.css" />
    <?php if(get_lang() == 'zh-tw' || 'zh-cn') {echo '<link rel="stylesheet" type="text/css" href="styles/chinese.css" />';} ?>
(continues)

第17行:

<?php if($lang_file=='lang.zh-tw.php' || $lang_file=='lang.zh-cn.php') {echo '<link rel="stylesheet" type="text/css" href="styles/chinese.css" />';} ?>

第23至26行:

<ul id="lang">
        <li <?php if($lang_file=='lang.en.php') {echo 'class="current"';} ?>><a href="index.php?lang=en">ENGLISH</a></li>
        <li <?php if($lang_file=='lang.es.php') {echo 'class="current"';} ?>><a href="index.php?lang=es">ESPAÑOL</a></li>
        <li <?php if($lang_file=='lang.zh-tw.php') {echo 'class="current"';} ?>><a href="index.php?lang=zh-tw">中文(繁體)</a></li>
        <li <?php if($lang_file=='lang.zh-cn.php') {echo 'class="current"';} ?>><a href="index.php?lang=zh-cn">中文(简体)</a></li>

推荐答案

不要成为一个懒惰的程序员!

Don't be an inappropriately lazy programmer!

$lang = get_lang();
if($lang == 'zh-tw' || $lang == 'zh-cn')
{
 ...
}

代码说明.

这只是第17行,扩展为多行.除非if语句真正简单,否则最好避免使用单行if语句.这更容易阅读.

This is simply line 17, expanded into multiple lines. Unless the if statement is truly simple, it is best to avoid single line if statements. This is easier to read.

这会将get_lang()的返回值分配给变量:

This assigns the return value of get_lang() to a variable:

$lang = get_lang();

这将测试该lang变量是否包含'zh-tw'或'zh-ch':

This tests if that lang variable contains either 'zh-tw' or 'zh-ch':

if($lang == 'zh-tw' || $lang == 'zh-cn')

已经很晚了,我很累,但是我认为这实际上并没有做任何事情:

It's late and I'm tired, but I don't think this actually does much of anything:

if(get_lang() == 'zh-tw' || 'zh-cn')

它的计算结果为true,但这是因为PHP在布尔上下文中评估类型的方式.这些是字符串,它们不是空的.他们认为是正确的.由于未将get_lang()的返回值分配给变量,因此该值未被使用.

It evaluates to true, but that's because of the way PHP evaluates types in a boolean context. Those are strings and they're not empty. They evaluate to true. The return value of get_lang() is tossed away by PHP and not used, as it's not being assigned to a variable.

这篇关于两个简单的本地化PHP文件基本相同,但是一个不起作用?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆