2010-12-29 10 views
0

Ich habe einen Text in Englisch, den ich in Französisch umwandeln möchte.Lokalisieren eines Textes mit gettext

die Sequenz, die i gefolgt sind unter:

  1. erzeugen gesamten Text im Terminal xgettext Befehl, POT-Datei erstellen
  2. .PO Datei von POT-Datei
  3. Schaffung Schaffung .mo Datei aus .po Datei

ich die .mo-Datei kopieren in "/ usr/share/locale/fr/LC_MESSAGES"

hier ist mein Code für main.c Datei:

int main() 

{ 

    setlocale(LC_ALL,""); 
    bindtextdomain("main","/usr/share/locale"); 
    textdomain("main"); 
    printf(gettext("Hello world\n")); 
    return (0); 
} 

Wenn ich das Programm der Französisch-Version des Textes auszuführen ist nicht im Terminal ausgedruckt. Was kann der Grund für dieses Problem sein?

Hier ist meine fr.po Datei

# French translations for GNU main package. 
# Copyright (C) 2010 THE GNU main'S COPYRIGHT HOLDER 
# This file is distributed under the same license as the GNU main package. 
# 
msgid "" 
msgstr "" 
"Project-Id-Version: GNU main 0.1\n" 
"Report-Msgid-Bugs-To: \n" 
"POT-Creation-Date: 2010-12-29 10:14+0530\n" 
"PO-Revision-Date: 2010-12-29 12:21+0530\n" 
"Last-Translator: Lenin\n" 
"Language-Team: French\n" 
"Language: fr\n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=ASCII\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Plural-Forms: nplurals=2; plural=(n > 1);\n" 

#: main.c:29 
#, c-format 
msgid "Hello world\n" 
msgstr "Bonjour tout le monde\n" 

Hier mein Anruf von aktuellen Verzeichnis msgfmt ist:

msgfmt -c -v -o main.mo fr.po 
+1

Und deine Frage ist? –

+0

@Martin: Sorry vergessen, Frage hinzufügen, wird jetzt bearbeiten. – boom

+1

Bitte zeigen Sie auch Ihre fr.po, und wie Sie msgfmt aufrufen. –

Antwort

3

Sie brauchen nicht die Systemdateien/Verzeichnisse zu berühren. Und Sie sollten sie nicht anfassen, wenn Sie sich entwickeln.

Ich habe versucht, den folgenden Code:

#include <stdio.h> 
#include <locale.h> 
#include <libintl.h> 

int main(int argc, char **argv) 
{ 
    setlocale(LC_ALL, ""); 
    bindtextdomain("main", "."); 
    textdomain("main"); 
    printf(gettext("Hello world\n")); 
    return (0); 
} 

, die ganz ähnlich wie der Code ist, außer ich die Lokalisierung in meiner Entwicklung Verzeichnis bin Prüfung (aktuellen).

Erstellen Sie die Vorlage für Übersetzungen

$ xgettext -o main.pot main.c 

die Dateien erstellen mit der Vorlage zu übersetzen:

$ msginit --no-translator -l es -o es.po -i main.pot 
Created es.po. 
$ msginit --no-translator -l fr -o fr.po -i main.pot 
Created fr.po. 

bearbeiten und die Dateien übersetzen. Setzen Sie Project-Id-Version auf Haupt und übersetzen Sie die Zeilen. In diesem Fall entspricht die Zeile 23 meinem Quellcode.

die Zielverzeichnisse für Übersetzungen erstellen:

$ mkdir -p es/LC_MESSAGES 
$ mkdir -p fr/LC_MESSAGES 

Compile und die Übersetzungen installieren:

$ msgfmt -o es/LC_MESSAGES/main.mo es.po 
$ msgfmt -o fr/LC_MESSAGES/main.mo fr.po 

Kompilieren Sie das Programm:

$ make main 
cc  main.c -o main 

Führen Sie das Programm:

$ LANGUAGE=C ./main 
Hello world 
$ LANGUAGE=es ./main 
Hola mundo 
$ LANGUAGE=fr ./main 
Bonjour tout le monde 

Das ist.

Sie könnten das Programm vor dem Übersetzen kompilieren und Fehler beheben, bevor Sie es übersetzen.