it-swarm.com.de

die beste Möglichkeit, die Website von codeigniter mehrsprachig zu gestalten. Aufrufen von lang-Arrays hängt von lang-Sitzung ab?

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...

  • sie müssen einen polish_lang.php und english_lang.php in application/language/polish erstellen.
  • erstellen Sie dann Ihre Schlüssel in dieser Datei (z. B. $lang['hello'] = "Witaj";
  • laden Sie es dann in Ihren Controller wie $this->lang->load('polish_lang', 'polish');
  • dann holen Sie die Zeile wie $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.

90
Randell

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');
22
Matthew Rapati

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.

7
YoGo

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;
}
1
Ben Mullikin

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

1
Samy Massoud

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.

0
user151516

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

0
Justis Matotoka

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

0
Dmitry Khartsy

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. 

0
Mei