LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Ответ на вопрос — или всегда возвращаешь #f, или заморачиваешься и реализуешь проверки на изменение данных.

Вопрос не про то, как написать srfi-29. Вопрос про-то, как его использовать.

Скажем для gettext я должен указать

  setlocale (LC_ALL, "");
  bindtextdomain (PACKAGE, LOCALEDIR);
  textdomain (PACKAGE);
и всё будет правильно работаеть

Что написать для подключения srfi-29?

Написать

(load-bundle! bundle-name)
нельзя. load-bundle может возвращать всегда #f.

Написать

(if (not (load-bundle! bundle-name))
    (begin
      (declare-bundle! bundle-name translation)
      (store-bundle! bundle-name))))
нельзя, при обновлении программы перевод останется от старой программы.

Написать

(declare-bundle! bundle-name translation)
можно. Но зачем и когда нужно использовать load-bundle! и store-bundle! ?

Написать

(define-syntax localization
  (lambda (stx)
    (syntax-case stx ()
      ((_ bundle-name translation ...)
       (begin
         (declare-bundle! (syntax->datum #'bundle-name) (syntax->datum #'(translation ...)))
         (store-bundle! (syntax->datum #'bundle-name))
         #'(if (not (load-bundle! bundle-name))
               (declare-bundle! bundle-name '(translation ...))))))))
? Вроде правильно (при перекомпиляции перевод обновляется, без необходимости declare-bundle! не выполняется), но сторонний эффект при вызове макроса слегка напрягает.

Как правильно?

Исходная версия monk, :

Ответ на вопрос — или всегда возвращаешь #f, или заморачиваешься и реализуешь проверки на изменение данных.

Вопрос не про то, как написать srfi-29. Вопрос про-то, как его использовать.

Скажем для gettext я должен указать

  setlocale (LC_ALL, "");
  bindtextdomain (PACKAGE, LOCALEDIR);
  textdomain (PACKAGE);
и всё будет правильно работаеть

Что написать для подключения srfi-29?

Написать

(load-bundle! bundle-name)
нельзя. load-bundle может возвращать всегда #f.

Написать

(if (not (load-bundle! bundle-name))
    (begin
      (declare-bundle! bundle-name translation)
      (store-bundle! bundle-name))))
нельзя, при обновлении программы перевод останется от старой программы.

Написать

(declare-bundle! bundle-name translation)
можно. Но зачем и когда нужно использовать load-bundle! и store-bundle! ?

Написать

(define-syntax localization
  (lambda (stx)
    (syntax-case stx ()
      ((_ bundle-name translation)
       (begin
         (declare-bundle! (syntax->datum bundle-name) (syntax->datum translation))
         (store-bundle! (syntax->datum bundle-name))
         #'(if (not (load-bundle! bundle-name))
               (declare-bundle! bundle-name translation)))))))
? Вроде правильно (при перекомпиляции перевод обновляется, без необходимости declare-bundle! не выполняется), но сторонний эффект при вызове макроса слегка напрягает.

Как правильно?