Docs about i18n.

portnov [2009-07-12 15:47:07]
Docs about i18n.
Filename
Framework/GetText.hs
README.ru
diff --git a/Framework/GetText.hs b/Framework/GetText.hs
index b432605..d2741ad 100644
--- a/Framework/GetText.hs
+++ b/Framework/GetText.hs
@@ -23,7 +23,11 @@ fillLocale loc =
              Just c -> loc++"_"++c++".UTF-8"
              Nothing -> loc++"_"++(map toUpper loc)++".UTF-8"

-gettextInit :: String -> String -> String -> IO ()
+-- | Initialize GetText. NB: initialization affects all the OS thread, not only haskell's `green` thread.
+gettextInit :: String            -- ^ Locale specification, such as `en_GB.UTF-8'
+            -> String            -- ^ GetText domain
+            -> String            -- ^ Directory with .mo files
+            -> IO ()
 gettextInit lang domain dir = do
     val <- setLocale LC_ALL $ Just $ fillLocale lang
     case val of
@@ -33,11 +37,13 @@ gettextInit lang domain dir = do
     textDomain $ Just domain
     return ()

+-- | Translate the string (in IO monad)
 __io :: String -> IO String
 __io text = do
     res <- getText text
     return $ decodeString res

+-- | Translate the string
 __ :: String -> AController String
 __ text = liftIO $ __io text

diff --git a/README.ru b/README.ru
index 7671742..d901ced 100644
--- a/README.ru
+++ b/README.ru
@@ -132,3 +132,11 @@ controller = do
  * Обработчики исключений: приложение может определить свои обработчики для request exceptions и controller exceptions.

 Все эти функции должны быть определены в приложении в модуле Settings.hs, оттуда их импортируют разные части фреймворка. В нём же определяется соответствие возможных сигналов и их обработчиков.
+
+## Интернационализация
+
+Для интернационализации используется gettext и его привязки к haskell - hgettext. В контроллерах для перевода строки следует использовать функцию __. Затем .hs файлы обрабатываются утилитой hgettext, получается messages.pot и т.д. как обычно с gettext. Интернационализация в шаблонах сейчас не предусмотрена, предлагается либо переводить строки в контроллерах, либо использовать разные шаблоны для разных языков.
+
+Встроенное middleware добавляет в каждый запрос два заголовка: X-UserLanguage и X-UserCharset, например X-UserLanguage: ru_RU, X-UserCharset: .UTF-8 (информация берётся из заголовков AcceptLanguage и AcceptEncoding). Эти заголовки можно использовать в приложении. Кроме того, другое встроенное middleware использует их для инициализации gettext. Таким образом, без усилий программиста приложения, с каждым пользователем оно будет разговаривать на его языке (том, который выставлен в браузере как язык по умолчанию). Если перевода на этот язык нет, будет использован английский.
+
+Сейчас фреймворк расчитан на использование кодировки UTF8.
ViewGit