LINUX.ORG.RU

Go и «html/template» и i18n

 ,


0

1

Всем привет! Я новичек в Go, до этого писал сайты на руби. Подскажите мне, как в Go правильно работать с Html Templates. В моем проекте есть package «WebInterface» который находится внутри основного проекта. Как сделать так, чтобы templates лежали в папке package и их можно было подгружать не изменяя пути.

Загружаю templates так:

t, err = t.ParseFiles(«templates/main.html»)

папка templates сейчас лежит в корне проекта, но я хочу чтобы лежала в «WebInterface/templates/main.html» но для этого мне нужно указывать прямой путь к template. А я хочу чтобы мой модуль WebInterface можно было использовать в других программах без изменения пути к папке templates

Еще интересует какие есть модули для создания мультиязычного веб-сайта в Go

По многоязычности я сам недавно гуглил, вот что нашел:

Первое не слишком живое, но на первый взгляд поюзабельней, плюс там различные бекенды поддерживаются, можно юзать как yaml, так и gorm, например. Второе выглядит как-то ужасно, я даже не смотрел, но оно гораздо живее.

WitcherGeralt ★★ ()
Ответ на: комментарий от WitcherGeralt

Неужто у тебя абсолютные пути не работают?

Если вызываю t, err = t.ParseFiles(«templates/main.html») из WebInterface - тогда при вызове из главного файла main.go WebInterface.RunWeb() ругается что файл не найден.

vladpunch ()

К вопросу №1:

Т.к. Go это компилируемый язык и после компиляции файловая структура пакета более де-факто не доступна, и в общем не известно, где и как будет запущен или использован пакет†, есть в общем случае 2 решения данной пробемы:

  1. Использовать абсолютные или изветсные пути (~/.config/... и т.п.) для ассетов
  2. Зашить ассеты в бинарник (go-bindata и подобное) и быть независимым от файловой системы

К вопросу №2:

Глянь на golang.org/x/text и в частности на golang.org/x/text/message.

†) исключение: тесты. Они выполняются в контексте пакета, и для подтягивания ассетов из testdata достаточно использовать отностиельные пути.

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от vladpunch

Почему?
Добавь в конфиг возможность указать директорию для шаблонов, а по умолачнию используй текущую рабочую директорию, присоединяя в конец относительный путь.

Deleted ()