Вам не нужно трогать системные файлы / каталоги.И вам не следует прикасаться к ним, если вы разрабатываете.
Я попробовал следующий код:
#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
То есть.
Возможно, вы захотите скомпилировать программу и исправить ошибки перед ее переводом..