локализация текста с использованием gettext - PullRequest
0 голосов
/ 29 декабря 2010

У меня есть текст на английском, который я хочу перевести на французский.

Последовательность, которой я следовал, выглядит так:

  1. сгенерируйте весь текст с помощью команды xgettext в терминале, создав файл .pot
  2. создание файла .po из файла .pot
  3. создание .mo файла из .po файла

У меня есть копия файла .mo в "/ usr / share / locale / fr / LC_MESSAGES"

вот мой код для файла main.c:

int main()

{

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

Когда я выполняю программу, французская версия текста не печатается в терминале. В чем может быть причина этой проблемы?

Вот мой файл fr.po

# 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"

Вот мой вызов msgfmt из текущего каталога:

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

1 Ответ

3 голосов
/ 06 мая 2011

Вам не нужно трогать системные файлы / каталоги.И вам не следует прикасаться к ним, если вы разрабатываете.

Я попробовал следующий код:

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

Что очень похоже на ваш код, за исключением того, что я тестирую локализацию в моем каталоге разработки(текущий).

Создание шаблона для переводов

$ xgettext -o main.pot main.c

Создание файлов для перевода с использованием шаблона:

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

Редактирование и перевод файлов.Установите Project-Id-Version на main и переведите строки.В этом случае строка 23 соответствует моему исходному коду.

Создайте целевые каталоги для переводов:

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

Скомпилируйте и установите переводы:

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

Скомпилируйте программу:

$ make main
cc     main.c   -o main

Запустите программу:

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

То есть.

Возможно, вы захотите скомпилировать программу и исправить ошибки перед ее переводом..

...