Каков рекомендуемый способ использования srfi-29? Или как сделать локализацию в схеме / ракетке?
Я нахожу способ сделать правильную локализацию программы Racket или Scheme. Что и как использовать?
Я прочитал srfi-29, но не понимаю, как правильно его использовать.
Я сделал собственный велосипед, но я бы предпочел сделать это стандартным способом (если есть).
Вот пример использования SRFI-29:
(if (not (load-bundle! bundle-name))
(begin
(declare-bundle! bundle-name (cdr translation))
(store-bundle! bundle-name)))
Но таким образом, когда пользователь получает новую версию программы с новым переводом, новый перевод не будет загружен. Потому что комплектация! загрузит старую версию и вернет #t.
Библиотека ракеток SRFI-19 использует код
(or (load-bundle! (list* 'srfi-19
(current-language)
(current-country)
(current-locale-details)))
;; A little bit less specific
(load-bundle! (list 'srfi-19
(current-language)
(current-country)))
;; less specific
(load-bundle! (list 'srfi-19 (current-language)))
;; the least specific one (this one *does* exist!, it comes with this srfi) don't worry:
(load-bundle! (list 'srfi-19)))
но SRFI-29 заявляет, что "совместимая система Scheme может предпочесть не предоставлять какой-либо внешний механизм для хранения локализованных пакетов. Если это не так, она все равно должна предоставить реализации для store-bundle и load-bundle!". В таком случае, обе функции должны возвращать #f независимо от заданных аргументов. "
Кроме того, я не могу найти другой пример использования SRFI-29 на github. Может быть, этот SRFI действительно сломан, кто знает?