Ich recherchiere Stunden und Stunden, aber ich konnte keinen klaren, effizienten Weg finden, um es zu schaffen: /
Ich habe eine Codeigniter-Basis-Website in Englisch und muss jetzt eine polnische Sprache hinzufügen. Wie kann ich meine Website je nach Besucherauswahl in 2 Sprachen erstellen?
gibt es eine Möglichkeit, Array-Dateien für jede Sprache zu erstellen und sie in View-Dateien aufzurufen, hängt von der Session-Auswahl von lang ab. Ich möchte keine Datenbank verwenden.
Schätzen hilft! Ich habe keine Deadline mehr:/Danke !!
Haben Sie CodeIgniters Sprachbibliothek gesehen?
Die Sprachklasse bietet Funktionen um Sprachdateien und Zeilen abzurufen Text für Zwecke der Internationalisierung.
In Ihrem CodeIgniter-Systemordner werden Sie finde eine Sprache namens Sets von Sprachdateien. Sie können Ihre .__ erstellen. eigene Sprachdateien nach Bedarf in der Reihenfolge Fehler und andere Meldungen in .__ anzeigen. andere Sprachen.
Sprachdateien werden normalerweise in .__ gespeichert. Ihr System-/Sprachverzeichnis. Abwechselnd Sie können einen Ordner mit dem Namen Sprache erstellen in Ihrem Anwendungsordner und speichern Sie die dort. CodeIgniter wird zuerst aussehen in Ihrem Anwendungs-/Sprachverzeichnis. Wenn das Verzeichnis nicht existiert oder die Die angegebene Sprache befindet sich nicht dort CI wird stattdessen in Ihrem globalen .__ suchen. System-/Sprachordner.
In Ihrem Fall...
polish_lang.php
und english_lang.php
in application/language/polish
erstellen.$lang['hello'] = "Witaj";
$this->lang->load('polish_lang', 'polish');
$this->lang->line('hello');
. Speichern Sie einfach den Rückgabewert dieser Funktion in einer Variablen, damit Sie ihn in Ihrer Ansicht verwenden können.Wiederholen Sie die Schritte für die englische Sprache und alle anderen Sprachen, die Sie benötigen.
Um die Sprache zur Sitzung hinzuzufügen, würde ich einige Konstanten für jede Sprache definieren und dann sicherstellen, dass die Sitzungsbibliothek automatisch in die Datei config/autoload.php geladen wird, oder Sie laden sie bei Bedarf. Fügen Sie der Sitzung die gewünschte Sprache für die Benutzer hinzu:
$this->session->set_userdata('language', ENGLISH);
Dann kannst du es jederzeit so packen:
$language = $this->session->userdata('language');
Fügen Sie im Controller folgende Zeilen hinzu, wenn Sie den Konstruktor erstellen
d. h. nach
parent :: Controller ();
fügen Sie die folgenden Zeilen hinzu
$this->load->helper('lang_translate');
$this->lang->load('nl_site', 'nl'); // ('filename', 'directory')
erstellen Sie die Hilfedatei lang_translate_helper.php mit folgender Funktion und legen Sie sie im Verzeichnis system\application\helpers ab
function label($label, $obj)
{
$return = $obj->lang->line($label);
if($return)
echo $return;
else
echo $label;
}
erstellen Sie für jede Sprache ein Verzeichnis mit Sprachabkürzung wie en, nl, fr usw. unter system\application\languages
erstellen Sie eine Sprachdatei im obigen (jeweiligen) Verzeichnis, das das $ lang-Array enthält, das die Paare label => language_value wie unten angegeben enthält
nl_site_lang.php
$lang['welcome'] = 'Welkom';
$lang['hello Word'] = 'worde Witaj';
de_site_lang.php
$lang['welcome'] = 'Welcome';
$lang['hello Word'] = 'Hello Word';
sie können mehrere Dateien für dieselbe Sprache mit unterschiedlichen Anforderungen speicherneg: Wenn Sie eine separate Sprachdatei für die Verwaltung des Backends (Administratorabschnitt) benötigen, können Sie sie im Controller als $ this-> lang-> load ('nl_admin) verwenden ',' nl ');
nl_admin_lang.php
$lang['welcome'] = 'Welkom';
$lang['hello Word'] = 'worde Witaj';
und schließlich, um das Etikett in der gewünschten Sprache zu drucken, greifen Sie wie unten in der Ansicht auf die Etiketten zu
label ('welcome', $ this);
OR
label ('Hallo Wort', $ this);
beachten Sie den Platz in Hallo und Word, den Sie auch so verwenden können :)
wenn in der Sprachdatei kein Label definiert ist, wird es einfach gedruckt, was Sie an das Funktionslabel übergeben haben.
Ich bin Randells Antwort.
Es könnte jedoch immer ein GeoIP wie http://www.maxmind.com/app/php Oder http://www.ipinfodb.com/ integriert werden. Dann können Sie die Ergebnisse mit der Sitzungsklasse codeigniter speichern.
Wenn Sie die ipinfodb.com-API verwenden möchten, können Sie die Datei ip2locationlite.class.php zum Codeigniter-Anwendungsbibliotheksordner hinzufügen und anschließend eine Modellfunktion erstellen, um die für Ihre Anwendung erforderliche Geoip-Logik auszuführen.
function geolocate()
{
$ipinfodb = new ipinfodb;
$ipinfodb->setKey('API KEY');
//Get errors and locations
$locations = $ipinfodb->getGeoLocation($this->input->ip_address());
$errors = $ipinfodb->getError();
//Set geolocation cookie
if(empty($errors))
{
foreach ($locations as $field => $val):
if($field === 'CountryCode')
{
$place = $val;
}
endforeach;
}
return $place;
}
Zur einfacheren Verwendung habe CI dieses aktualisiert, damit Sie es einfach verwenden können
$this->load->helper('language');
und um Text zu übersetzen
lang('language line');
wenn Sie es innerhalb des Labels verziehen möchten, verwenden Sie optionale Parameter
lang('language line', 'element id');
Dies wird ausgegeben
// becomes <label for="form_item_id">language_key</label>
Zum guten Lesen http://ellislab.com/codeigniter/user-guide/helpers/language_helper.html
Wenn Sie die eigentlichen Dateien verwalten, kann die Synchronisierung ziemlich leicht aufgehoben werden, wenn Sie nicht wirklich wachsam sind. Deshalb haben wir einen kostenlosen (Beta-) Dienst namens String eingeführt, mit dem Sie Ihre Sprachdateien problemlos nachverfolgen und mit Übersetzern zusammenarbeiten können.
Sie können entweder vorhandene Sprachdateien importieren (im Array PHP, PHP, Ini, Po oder .strings-Formate) oder Ihre eigenen Abschnitte von Grund auf erstellen und Inhalte direkt über das System hinzufügen.
String ist völlig kostenlos, also schau es dir an und sag uns, was du denkst.
Es ist eigentlich auch auf Codeigniter aufgebaut! Sehen Sie sich die Beta unter http://mygengo.com/string an.
Folgen Sie dieser https://github.com/EllisLab/CodeIgniter/wiki/CodeIgniter-2.1-internationalization-i18n
es ist einfach und übersichtlich. Schauen Sie sich auch das Dokument an @ http://ellislab.com/codeigniter/user-guide/libraries/language.html
es ist einfacher als
Ich verwende einen solchen Code in der config.php:
$lang = 'ru'; // this language will be used if there is no any lang information from useragent (for example, from command line, wget, etc...
if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'],0,2);
$tmp_value = $_COOKIE['language'];
if (!empty($tmp_value)) $lang = $tmp_value;
switch ($lang)
{
case 'ru':
$config['language'] = 'russian';
setlocale(LC_ALL,'ru_RU.UTF-8');
break;
case 'uk':
$config['language'] = 'ukrainian';
setlocale(LC_ALL,'uk_UA.UTF-8');
break;
case 'foo':
$config['language'] = 'foo';
setlocale(LC_ALL,'foo_FOO.UTF-8');
break;
default:
$config['language'] = 'english';
setlocale(LC_ALL,'en_US.UTF-8');
break;
}
.... und dann verwende ich normalerweise den internen Mechanismus von CI
o, fast vergessen! In Ansichten verwende ich Schaltflächen, die die Cookie-Sprache mit der vom Benutzer bevorzugten Sprache setzen.
Daher versucht dieser Code zuerst, die "bevorzugte Sprache" zu ermitteln, die im Benutzeragenten (Browser) des Benutzers festgelegt ist. Dann versuche der Code, die Cookie-Sprache zu lesen. Und finaly - switch stellt die Sprache für die CI-Anwendung ein
Ich habe die MY_Language-Klasse von Wiredesignz mit großem Erfolg verwendet.
Ich habe es gerade auf Github veröffentlicht, da ich nirgendwo eine Spur davon finden kann.
https://github.com/meigwilym/CI_Language
Meine einzige Änderung besteht darin, die Klasse in CI_Lang umzubenennen, entsprechend den Änderungen in v2.