przyklad użycia libintl

0

Obejrzałem ten przykład użycia libintl https://erri120.github.io/posts/2022-05-05/
i utworzyłem projekt na github https://github.com/mariuszmaximus/CppInternationalization

niby powinno działać

int main() {
  setup_i18n("de");

  std::cout << _("Hello World!") << std::endl;
}

Powinno być DE Hello World! ale nie działa i jest Hello World!

2

std::cout << _("Hello World!") << std::endl;

Nie pierwszy, nie drugi i nie piąty raz widzę jak jakaś biblioteka/narzędzia używa makra w postaci _ i każde jedno takie narzędzie było albo nieintuicyjne w używaniu, albo miało bugi, albo jakieś dziwne zależności albo wszystko razem. Co ciekawe, w każdym takim systemie to makro oznaczało zupełnie co innego. W tej chwili już mam odruch, że jak ktoś/coś tego używa to od razu wiem, że g**no i trzymać się z daleka. Co to w ogóle za poroniony pomysł używać takiego makra, które absolutnie nic nie mówi i może oznaczać cokolwiek. To już nawet w winapi masz nieco bardziej ludzkie makro w postaci TEXT(), w a to przecież winapi ludzie przytaczają jako przykład zagmatwanego i nieprecyzyjnego API.

A jeśli potrzebujesz wielojęzykowości to ICU ma biblioteki, które są niejako standardem i jeżeli planujesz spędzić nad tym czas to zapoznanie się z nimi będzie mniejszą stratą czasu niż niż praca z czymkolwiek innym. ICU są dość niskopoziomowe więc będziesz musiał zmajstrować jakiś wprapper, albo znaleźć jakiś istniejący pasujący do Twojego użycia.

0

dla mnie konstrukcja _(...) wygląda jakoś normalnie, jakoś jestem przesiąknięty koncepcją ze to ekwiwalent gettext(...)

jako ciekawostkę można zobaczyć projekt https://github.com/zauguin/i18n-cpp
i tutaj tłumaczony tekst wygląda tak:

  std::cout << "The first message.\n"_;
  std::cout << "We have {} message(s).\n"_(6);
  const char *open_file_label = "file|open"_; // Add some context to differentiate messages which are the same in english
  const char *open_door_label = "door|open"_; // Add some context to differentiate messages which are the same in english

😄

ale nie mam c++20 :(

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.