Во время сборки строки в кавычках будут проверяться программой, такой как xgettext, для создания файла каталога базовых сообщений. Оператор << с аргументом i18n :: cout будет принимать строковый литерал в качестве ключа для поиска текста времени выполнения, который будет использоваться из каталога сообщений. </p>
Вы пытаетесь преобразовать строку как отдельный экземпляр, но это не /
Дело в том, что тебе не нужно что-то подобное. Подумайте о:
if(n=1)
i18n::cout << "I need one apple"
else
i18n::cout << "I need " << n << " apples" ;
Так почему это не сработает, потому что «n = 1» или «n! = 1» работает только для английского языка, многие другие языки имеют более одной формы множественного числа, также требуется перевод «Мне нужны X яблок» как экземпляр signle.
Я предлагаю вам просто научиться разбираться с gettext, он довольно простой и мощный, многие думали об этом.
Еще один момент, вы обычно не вызываете gettext, а
#include <libintl.h>
#include <iostream>
#define _(x) gettext(x)
int main (){
std::cout << _("hello, world!\n");
}
Это делает код намного чище, также это довольно "стандартная" возможность использовать "_" в качестве псевдонима gettext.
Просто узнайте, как его использовать, прежде чем пытаться сделать «более приятный» API. Отметим, что gettext API является стандартом де-факто для многих языков, не только для C.