2010-09-26 2 views
6

Facebook hat diesen einzigartigen und cleveren Ansatz für die Lokalisierung seiner Website: Übersetzer (in diesem Fall Benutzer, die die Website freiwillig übersetzen) können einfach auf die noch nicht übersetzten Zeichenfolgen klicken. die mit einem grünen unteren Rand markiert sind - in ihrem natürlichen Kontext auf der Website. Siehe http://www.facebook.com/translations/.Open-Source-Projekte für i18n à la Facebook

Nun, wenn Sie jemals mit der Übersetzung einer Website zu tun haben, werden Sie sich bewusst, wie seltsam und witzig einige dieser Übersetzungen sein können, wenn Werkzeuge wie poedit verwenden, wo der Übersetzer nicht vollständig bewusst ist Die Stelle, an der die übersetzte Zeichenfolge angezeigt wird, erscheint auf der Website.

Beispiel: Bitte übersetzen Sie "Home". Auf Deutsch wäre zum Beispiel die Startseite einer Website "Home", während das Haus, in dem Sie leben, "Heim" ist. Nun müssen Sie als Übersetzer im Grunde raten, in welchen Kontext dieser Begriff wahrscheinlich auf der Website erscheinen wird, und dementsprechend übersetzen. Wahrscheinlichkeiten sind, du bist neue Website auf Wohnmöbel jetzt übersetzt als "Home-Einrichtung", die lächerlich zu jedem Deutsch klingt.

So kocht meine Frage nach unten:

Kennen Sie ein Open-Source-PHP-Projekte, wie dies auf etwas arbeiten? Ich bin im Grunde auf der Suche nach einem Framework, mit dem Sie Ihre internationalisierte Website in den "Übersetzungsmodus" versetzen und Strings anklickbar und übersetzbar machen können, z. durch ein Javascript modal.

Ich bin nicht so sehr auf der Suche nach einer vollwertigen und vorgefertigten Lösung, würde aber gerne ähnliche Projekte kennenlernen, zu denen ich Code beitragen kann.

Vielen Dank im Voraus!

+0

Dies ist eine gute Frage und wird wahrscheinlich immer relevanter werden, wenn Websites immer globaler werden! – Ryan

Antwort

1

Wenn Sie Ihre eigene mit jquery & jquery browserLanguage rollen möchten, könnte dies Sie in Fahrt bringen.

Tag alle übersetzbaren Text enthalten Elemente mit class="i18n", und umfassen jquery, jquery browserLanguage und Ihre i18n-Skript.

. die Internationalisierung javascript

- dies muss Übersetzungen über Ajax von Ihrem Server akzeptieren, wie:

var i18n = {}; 
i18n.bank = new Array(); 
i18n.t = function (text, tl=$.browserLanguage) { 
    var r = false; 
    $.ajax({ 
     url: "/i18n_t.php?type=request&from="+ escape(text) +"&tl="+ tl, 
     success: function(){ i18n.bank[text] = this; r = true; } 
    }); 
    return r; 
}; 

. php i18n Übersetzungsservice

- jetzt brauchen wir Übersetzungen servieren, und akzeptieren sie

die Datenbank wie ein Haufen von Tabellen aussehen wird, eine für jede Sprache.

// 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 
) 

die php wird einige verbindung und db manipulation ..denn jetzt kann dies tun:

//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; 
} 

der Code ist einfach:

<?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')"); 
    } 
} 
?> 

. Seite Übersetzung Mechanik

- schließlich können wir sie zusammen in Ihre Web-Seiten mit einigen weiteren jquery binden:

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]); 
     } 
    }); 
}); 

Wohlgemerkt ich habe nicht einen Server diese auf testen ... und Ich kodiere PHP eigentlich nicht. : D Es wird etwas Debugging erfordern, aber das Gerüst sollte korrekt sein.