Localization i18n和xE0的开源项目;洛杉矶脸谱网

Localization i18n和xE0的开源项目;洛杉矶脸谱网,localization,internationalization,translation,Localization,Internationalization,Translation,Facebook有一种独特而聪明的网站本地化方法:翻译人员(在他们的情况下,是自愿帮助翻译网站的用户)只需在网站上的自然环境中点击尚未翻译的字符串(标有绿色底边)。看 现在,如果你曾经处理过一个网站的翻译,你会很清楚当使用poedit这样的工具时,其中一些翻译是多么的奇怪和有趣,而译者并不完全知道翻译后的字符串将出现在网站上的位置 请翻译“家”。例如,在德语中,网站的首页是“Home”,而你住的房子是“Heim”。现在,作为译者,你基本上必须猜测这个术语可能出现在网站上的上下文,并进行相应的翻译

Facebook有一种独特而聪明的网站本地化方法:翻译人员(在他们的情况下,是自愿帮助翻译网站的用户)只需在网站上的自然环境中点击尚未翻译的字符串(标有绿色底边)。看

现在,如果你曾经处理过一个网站的翻译,你会很清楚当使用poedit这样的工具时,其中一些翻译是多么的奇怪和有趣,而译者并不完全知道翻译后的字符串将出现在网站上的位置

请翻译“家”。例如,在德语中,网站的首页是“Home”,而你住的房子是“Heim”。现在,作为译者,你基本上必须猜测这个术语可能出现在网站上的上下文,并进行相应的翻译。很有可能,你的家庭家具新网站现在被翻译成“home Einrichtoung”,这对任何德国人来说都是荒谬的

因此,我的问题归结为:

你知道有哪一个开源PHP项目可以在这样的平台上工作吗?我基本上是在寻找一个框架,允许您将国际化网站置于“翻译模式”,并使字符串可以点击和翻译,例如通过Javascript模式。

我并不是在寻找一个成熟的现成的解决方案,但我很想知道我可以贡献代码的类似项目


提前谢谢

如果您想使用jquery&jquerybrowserlanguage实现自己的功能,这可能会让您有所收获

class=“i18n”
标记所有可翻译文本中包含的元素,包括jquery、jquery browserLanguage和您的i18n脚本

一,国际化javascript

-这需要通过ajax从服务器接受翻译,如:

二,php i18n翻译服务

-现在我们需要提供翻译,并接受它们

数据库看起来就像一堆表,每种语言对应一个表

// SCHEMA for each language:
CREATE TABLE `en`
(
`id` INT PRIMARY KEY AUTO INCREMENT NOT NULL,
`from` VARCHAR(500) NOT NULL,
`to` VARCHAR(500) NOT NULL
)
php将需要一些连接和数据库操作。。目前,这可能会:

//Connect to the database
$connection = mysql_connect('host (usually localhost)', 'mysql_username' , 'mysql_password');
$selection = mysql_select_db('mysql_database', $connection);

function table_exists($tablename, $database = false) {
    if(!$database) {
        $res = mysql_query("SELECT DATABASE()");
        $database = mysql_result($res, 0);
    }

    $res = mysql_query("SELECT COUNT(*) AS count FROM information_schema.tables WHERE table_schema = '$database' AND table_name = '$tablename'
    ");

    return mysql_result($res, 0) == 1;
}
代码很简单:

<?php     
// .. database stuff from above goes here ..
$type=$_GET["type"];
$from=$_GET["from"];
$to=$_GET["to"];
$tl=$_GET["tl"];

if (! table_exists($tl)) {
...
}

if ($type == "request") { // might want to set $tl="en" when ! table_exists($tl)
    $find = mysql_query("SELECT to FROM `'$tl'` WHERE from='$from'");
    $row = mysql_fetch_array($find);
    echo $row['to'];
} elsif ($type == "suggest") {
    $find = mysql_query("SELECT COUNT(*) AS count FROM `'$tl'` WHERE from='$from'");
    if ( !(mysql_result($res, 0)) == 0 ) { 
        $ins = mysql_query("INSERT INTO `'$tl'` (from, to) VALUES ('$from','$to')");
    }
}
?>

这是一个很好的问题,随着网站越来越全球化,这个问题可能会变得越来越重要!
<?php     
// .. database stuff from above goes here ..
$type=$_GET["type"];
$from=$_GET["from"];
$to=$_GET["to"];
$tl=$_GET["tl"];

if (! table_exists($tl)) {
...
}

if ($type == "request") { // might want to set $tl="en" when ! table_exists($tl)
    $find = mysql_query("SELECT to FROM `'$tl'` WHERE from='$from'");
    $row = mysql_fetch_array($find);
    echo $row['to'];
} elsif ($type == "suggest") {
    $find = mysql_query("SELECT COUNT(*) AS count FROM `'$tl'` WHERE from='$from'");
    if ( !(mysql_result($res, 0)) == 0 ) { 
        $ins = mysql_query("INSERT INTO `'$tl'` (from, to) VALUES ('$from','$to')");
    }
}
?>
i18n.suggest = function (from) { // post user translation to our php
    $.ajax({ 
        url: "/i18n_t.php?type=suggest&from='+from+'&to="+ escape( $('#i18n_s').contents() ) +"&tl="+ $.browserLanguage, 
        success: function(){ $('#i18n_t_div').html('<em>Thanks!</em>').delay(334).fadeOut().remove(); }
    });
};

$(document).ready(function() {
    i18n.t("submit");
    i18n.t("Thanks!");
    $('.i18n').click( function(event) { //add an onClick event for all i18n spans
        $('#i18n_t_div').remove;
        $(this).parent().append(
'<div id="i18n_t_div"><form class="i18n_t_form">
    <input type="text" id="i18n_s" name="suggestion" value="+$(this).contents()+" />
    <input type="button" value="'+ i18n.bank[ "submit" ] +'" onclick="i18n.suggest( '+$(this).contents()+' )" />
</form></div>'
        );
    }).each(function(){ 
        var c = $(this).contents(); //now load initial translations for browser language for all the internationalized content on the page
        if ( i18n.t(c) ){
            $(this).html(i18n.bank[c]);
        }
    });
});