Каков рекомендуемый способ использования 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 действительно сломан, кто знает?

0 ответов

Другие вопросы по тегам