Merge pull request #506 from Atvaark/defaultlanguage
Replace 'en-us' literals with the default language
Cette révision appartient à :
révision
64ea0df4ee
|
@ -39,7 +39,6 @@ type Config struct {
|
||||||
|
|
||||||
var Defaults = Config{"localhost", 9999, "sqlite3", "./nyaa.db?cache_size=50", "default", DefaultScraperConfig, DefaultCacheConfig, DefaultSearchConfig, nil, DefaultFilesizeFetcherConfig, DefaultI18nConfig}
|
var Defaults = Config{"localhost", 9999, "sqlite3", "./nyaa.db?cache_size=50", "default", DefaultScraperConfig, DefaultCacheConfig, DefaultSearchConfig, nil, DefaultFilesizeFetcherConfig, DefaultI18nConfig}
|
||||||
|
|
||||||
|
|
||||||
var allowedDatabaseTypes = map[string]bool{
|
var allowedDatabaseTypes = map[string]bool{
|
||||||
"sqlite3": true,
|
"sqlite3": true,
|
||||||
"postgres": true,
|
"postgres": true,
|
||||||
|
|
|
@ -7,5 +7,5 @@ type I18nConfig struct {
|
||||||
|
|
||||||
var DefaultI18nConfig = I18nConfig{
|
var DefaultI18nConfig = I18nConfig{
|
||||||
TranslationsDirectory: "translations",
|
TranslationsDirectory: "translations",
|
||||||
DefaultLanguage: "en-us", // TODO: Remove refs to "en-us" from the code and templates
|
DefaultLanguage: "en-us",
|
||||||
}
|
}
|
||||||
|
|
3
main.go
3
main.go
|
@ -15,6 +15,7 @@ import (
|
||||||
"github.com/ewhal/nyaa/router"
|
"github.com/ewhal/nyaa/router"
|
||||||
"github.com/ewhal/nyaa/service/scraper"
|
"github.com/ewhal/nyaa/service/scraper"
|
||||||
"github.com/ewhal/nyaa/service/torrent/filesizeFetcher"
|
"github.com/ewhal/nyaa/service/torrent/filesizeFetcher"
|
||||||
|
"github.com/ewhal/nyaa/service/user"
|
||||||
"github.com/ewhal/nyaa/util/languages"
|
"github.com/ewhal/nyaa/util/languages"
|
||||||
"github.com/ewhal/nyaa/util/log"
|
"github.com/ewhal/nyaa/util/log"
|
||||||
"github.com/ewhal/nyaa/util/search"
|
"github.com/ewhal/nyaa/util/search"
|
||||||
|
@ -124,7 +125,7 @@ func main() {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err.Error())
|
log.Fatal(err.Error())
|
||||||
}
|
}
|
||||||
err = languages.InitI18n(conf.I18n)
|
err = languages.InitI18n(conf.I18n, userService.NewCurrentUserRetriever())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err.Error())
|
log.Fatal(err.Error())
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ type LanguagesJSONResponse struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func SeeLanguagesHandler(w http.ResponseWriter, r *http.Request) {
|
func SeeLanguagesHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
_, Tlang := languages.GetTfuncAndLanguageFromRequest(r, "en-us")
|
_, Tlang := languages.GetTfuncAndLanguageFromRequest(r)
|
||||||
availableLanguages := languages.GetAvailableLanguages()
|
availableLanguages := languages.GetAvailableLanguages()
|
||||||
|
|
||||||
format := r.URL.Query().Get("format")
|
format := r.URL.Query().Get("format")
|
||||||
|
@ -28,7 +28,7 @@ func SeeLanguagesHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
clv := ChangeLanguageVariables{NewSearchForm(), Navigation{}, Tlang.Tag, availableLanguages, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
clv := ChangeLanguageVariables{NewSearchForm(), Navigation{}, Tlang.Tag, availableLanguages, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
languages.SetTranslationFromRequest(changeLanguageTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(changeLanguageTemplate, r)
|
||||||
err := changeLanguageTemplate.ExecuteTemplate(w, "index.html", clv)
|
err := changeLanguageTemplate.ExecuteTemplate(w, "index.html", clv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func FaqHandler(w http.ResponseWriter, r *http.Request) {
|
func FaqHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
languages.SetTranslationFromRequest(faqTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(faqTemplate, r)
|
||||||
err := faqTemplate.ExecuteTemplate(w, "index.html", FaqTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
err := faqTemplate.ExecuteTemplate(w, "index.html", FaqTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
|
|
@ -56,7 +56,7 @@ func HomeHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
navigationTorrents := Navigation{nbTorrents, maxPerPage, pagenum, "search_page"}
|
navigationTorrents := Navigation{nbTorrents, maxPerPage, pagenum, "search_page"}
|
||||||
|
|
||||||
languages.SetTranslationFromRequest(homeTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(homeTemplate, r)
|
||||||
htv := HomeTemplateVariables{b, NewSearchForm(), navigationTorrents, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := HomeTemplateVariables{b, NewSearchForm(), navigationTorrents, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
|
|
||||||
err = homeTemplate.ExecuteTemplate(w, "index.html", htv)
|
err = homeTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
|
|
|
@ -106,7 +106,6 @@ func NewPanelSearchForm() SearchForm {
|
||||||
return form
|
return form
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
func IndexModPanel(w http.ResponseWriter, r *http.Request) {
|
func IndexModPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
currentUser := GetUser(r)
|
currentUser := GetUser(r)
|
||||||
if userPermission.HasAdmin(currentUser) {
|
if userPermission.HasAdmin(currentUser) {
|
||||||
|
@ -117,7 +116,7 @@ func IndexModPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
comments, _ := commentService.GetAllComments(offset, 0, "", "")
|
comments, _ := commentService.GetAllComments(offset, 0, "", "")
|
||||||
torrentReports, _, _ := reportService.GetAllTorrentReports(offset, 0)
|
torrentReports, _, _ := reportService.GetAllTorrentReports(offset, 0)
|
||||||
|
|
||||||
languages.SetTranslationFromRequest(panelIndex, r, "en-us")
|
languages.SetTranslationFromRequest(panelIndex, r)
|
||||||
htv := PanelIndexVbs{torrents, model.TorrentReportsToJSON(torrentReports), users, comments, NewPanelSearchForm(), currentUser, r.URL}
|
htv := PanelIndexVbs{torrents, model.TorrentReportsToJSON(torrentReports), users, comments, NewPanelSearchForm(), currentUser, r.URL}
|
||||||
err := panelIndex.ExecuteTemplate(w, "admin_index.html", htv)
|
err := panelIndex.ExecuteTemplate(w, "admin_index.html", htv)
|
||||||
log.CheckError(err)
|
log.CheckError(err)
|
||||||
|
@ -150,7 +149,7 @@ func TorrentsListPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
ShowItemsPerPage: true,
|
ShowItemsPerPage: true,
|
||||||
}
|
}
|
||||||
|
|
||||||
languages.SetTranslationFromRequest(panelTorrentList, r, "en-us")
|
languages.SetTranslationFromRequest(panelTorrentList, r)
|
||||||
htv := PanelTorrentListVbs{torrents, searchForm, Navigation{int(searchParam.Max), offset, pagenum, "mod_tlist_page"}, currentUser, r.URL}
|
htv := PanelTorrentListVbs{torrents, searchForm, Navigation{int(searchParam.Max), offset, pagenum, "mod_tlist_page"}, currentUser, r.URL}
|
||||||
err = panelTorrentList.ExecuteTemplate(w, "admin_index.html", htv)
|
err = panelTorrentList.ExecuteTemplate(w, "admin_index.html", htv)
|
||||||
log.CheckError(err)
|
log.CheckError(err)
|
||||||
|
@ -180,7 +179,7 @@ func TorrentReportListPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
torrentReports, nbReports, _ := reportService.GetAllTorrentReports(offset, (pagenum-1)*offset)
|
torrentReports, nbReports, _ := reportService.GetAllTorrentReports(offset, (pagenum-1)*offset)
|
||||||
|
|
||||||
reportJSON := model.TorrentReportsToJSON(torrentReports)
|
reportJSON := model.TorrentReportsToJSON(torrentReports)
|
||||||
languages.SetTranslationFromRequest(panelTorrentReportList, r, "en-us")
|
languages.SetTranslationFromRequest(panelTorrentReportList, r)
|
||||||
htv := PanelTorrentReportListVbs{reportJSON, NewSearchForm(), Navigation{nbReports, offset, pagenum, "mod_trlist_page"}, currentUser, r.URL}
|
htv := PanelTorrentReportListVbs{reportJSON, NewSearchForm(), Navigation{nbReports, offset, pagenum, "mod_trlist_page"}, currentUser, r.URL}
|
||||||
err = panelTorrentReportList.ExecuteTemplate(w, "admin_index.html", htv)
|
err = panelTorrentReportList.ExecuteTemplate(w, "admin_index.html", htv)
|
||||||
log.CheckError(err)
|
log.CheckError(err)
|
||||||
|
@ -207,7 +206,7 @@ func UsersListPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
offset := 100
|
offset := 100
|
||||||
|
|
||||||
users, nbUsers := userService.RetrieveUsersForAdmin(offset, (pagenum-1)*offset)
|
users, nbUsers := userService.RetrieveUsersForAdmin(offset, (pagenum-1)*offset)
|
||||||
languages.SetTranslationFromRequest(panelUserList, r, "en-us")
|
languages.SetTranslationFromRequest(panelUserList, r)
|
||||||
htv := PanelUserListVbs{users, NewSearchForm(), Navigation{nbUsers, offset, pagenum, "mod_ulist_page"}, currentUser, r.URL}
|
htv := PanelUserListVbs{users, NewSearchForm(), Navigation{nbUsers, offset, pagenum, "mod_ulist_page"}, currentUser, r.URL}
|
||||||
err = panelUserList.ExecuteTemplate(w, "admin_index.html", htv)
|
err = panelUserList.ExecuteTemplate(w, "admin_index.html", htv)
|
||||||
log.CheckError(err)
|
log.CheckError(err)
|
||||||
|
@ -241,7 +240,7 @@ func CommentsListPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
comments, nbComments := commentService.GetAllComments(offset, (pagenum-1)*offset, conditions, values...)
|
comments, nbComments := commentService.GetAllComments(offset, (pagenum-1)*offset, conditions, values...)
|
||||||
languages.SetTranslationFromRequest(panelCommentList, r, "en-us")
|
languages.SetTranslationFromRequest(panelCommentList, r)
|
||||||
htv := PanelCommentListVbs{comments, NewSearchForm(), Navigation{nbComments, offset, pagenum, "mod_clist_page"}, currentUser, r.URL}
|
htv := PanelCommentListVbs{comments, NewSearchForm(), Navigation{nbComments, offset, pagenum, "mod_clist_page"}, currentUser, r.URL}
|
||||||
err = panelCommentList.ExecuteTemplate(w, "admin_index.html", htv)
|
err = panelCommentList.ExecuteTemplate(w, "admin_index.html", htv)
|
||||||
log.CheckError(err)
|
log.CheckError(err)
|
||||||
|
@ -256,7 +255,7 @@ func TorrentEditModPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
if userPermission.HasAdmin(currentUser) {
|
if userPermission.HasAdmin(currentUser) {
|
||||||
id := r.URL.Query().Get("id")
|
id := r.URL.Query().Get("id")
|
||||||
torrent, _ := torrentService.GetTorrentById(id)
|
torrent, _ := torrentService.GetTorrentById(id)
|
||||||
languages.SetTranslationFromRequest(panelTorrentEd, r, "en-us")
|
languages.SetTranslationFromRequest(panelTorrentEd, r)
|
||||||
|
|
||||||
torrentJson := torrent.ToJSON()
|
torrentJson := torrent.ToJSON()
|
||||||
uploadForm := NewUploadForm()
|
uploadForm := NewUploadForm()
|
||||||
|
@ -302,7 +301,7 @@ func TorrentPostEditModPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
infos["infos"] = append(infos["infos"], "Torrent details updated.")
|
infos["infos"] = append(infos["infos"], "Torrent details updated.")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
languages.SetTranslationFromRequest(panelTorrentEd, r, "en-us")
|
languages.SetTranslationFromRequest(panelTorrentEd, r)
|
||||||
htv := PanelTorrentEdVbs{uploadForm, NewPanelSearchForm(), currentUser, err, infos, r.URL}
|
htv := PanelTorrentEdVbs{uploadForm, NewPanelSearchForm(), currentUser, err, infos, r.URL}
|
||||||
err_ := panelTorrentEd.ExecuteTemplate(w, "admin_index.html", htv)
|
err_ := panelTorrentEd.ExecuteTemplate(w, "admin_index.html", htv)
|
||||||
log.CheckError(err_)
|
log.CheckError(err_)
|
||||||
|
@ -364,7 +363,7 @@ func TorrentReassignModPanel(w http.ResponseWriter, r *http.Request) {
|
||||||
http.Error(w, "admins only", http.StatusForbidden)
|
http.Error(w, "admins only", http.StatusForbidden)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
languages.SetTranslationFromRequest(panelTorrentReassign, r, "en-us")
|
languages.SetTranslationFromRequest(panelTorrentReassign, r)
|
||||||
|
|
||||||
htv := PanelTorrentReassignVbs{ReassignForm{}, NewPanelSearchForm(), currentUser, form.NewErrors(), form.NewInfos(), r.URL}
|
htv := PanelTorrentReassignVbs{ReassignForm{}, NewPanelSearchForm(), currentUser, form.NewErrors(), form.NewInfos(), r.URL}
|
||||||
err := panelTorrentReassign.ExecuteTemplate(w, "admin_index.html", htv)
|
err := panelTorrentReassign.ExecuteTemplate(w, "admin_index.html", htv)
|
||||||
|
|
|
@ -10,7 +10,7 @@ import (
|
||||||
func NotFoundHandler(w http.ResponseWriter, r *http.Request) {
|
func NotFoundHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
w.WriteHeader(http.StatusNotFound)
|
w.WriteHeader(http.StatusNotFound)
|
||||||
|
|
||||||
languages.SetTranslationFromRequest(notFoundTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(notFoundTemplate, r)
|
||||||
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
|
|
@ -44,7 +44,7 @@ func SearchHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
htv := HomeTemplateVariables{b, searchForm, navigationTorrents, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := HomeTemplateVariables{b, searchForm, navigationTorrents, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
|
|
||||||
languages.SetTranslationFromRequest(searchTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(searchTemplate, r)
|
||||||
err = searchTemplate.ExecuteTemplate(w, "index.html", htv)
|
err = searchTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
package router
|
package router
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/ewhal/nyaa/service/user/permission"
|
|
||||||
"github.com/nicksnyder/go-i18n/i18n"
|
|
||||||
"html/template"
|
"html/template"
|
||||||
"log"
|
"log"
|
||||||
"math"
|
"math"
|
||||||
"net/url"
|
"net/url"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
"github.com/ewhal/nyaa/service/user/permission"
|
||||||
|
"github.com/ewhal/nyaa/util/languages"
|
||||||
|
"github.com/nicksnyder/go-i18n/i18n"
|
||||||
)
|
)
|
||||||
|
|
||||||
var FuncMap = template.FuncMap{
|
var FuncMap = template.FuncMap{
|
||||||
|
@ -92,6 +94,7 @@ var FuncMap = template.FuncMap{
|
||||||
},
|
},
|
||||||
"T": i18n.IdentityTfunc,
|
"T": i18n.IdentityTfunc,
|
||||||
"Ts": i18n.IdentityTfunc,
|
"Ts": i18n.IdentityTfunc,
|
||||||
|
"getDefaultLanguage": languages.GetDefaultLanguage,
|
||||||
"getAvatar": func(hash string, size int) string {
|
"getAvatar": func(hash string, size int) string {
|
||||||
return "https://www.gravatar.com/avatar/" + hash + "?s=" + strconv.Itoa(size)
|
return "https://www.gravatar.com/avatar/" + hash + "?s=" + strconv.Itoa(size)
|
||||||
},
|
},
|
||||||
|
|
|
@ -80,7 +80,7 @@ func UploadHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
|
||||||
|
|
||||||
htv := UploadTemplateVariables{uploadForm, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := UploadTemplateVariables{uploadForm, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
languages.SetTranslationFromRequest(uploadTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(uploadTemplate, r)
|
||||||
err := uploadTemplate.ExecuteTemplate(w, "index.html", htv)
|
err := uploadTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
|
|
@ -22,7 +22,7 @@ func UserRegisterFormHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
b := form.RegistrationForm{}
|
b := form.RegistrationForm{}
|
||||||
modelHelper.BindValueForm(&b, r)
|
modelHelper.BindValueForm(&b, r)
|
||||||
b.CaptchaID = captcha.GetID()
|
b.CaptchaID = captcha.GetID()
|
||||||
languages.SetTranslationFromRequest(viewRegisterTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewRegisterTemplate, r)
|
||||||
htv := UserRegisterTemplateVariables{b, form.NewErrors(), NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := UserRegisterTemplateVariables{b, form.NewErrors(), NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
err := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv)
|
err := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -38,7 +38,7 @@ func UserLoginFormHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
b := form.LoginForm{}
|
b := form.LoginForm{}
|
||||||
modelHelper.BindValueForm(&b, r)
|
modelHelper.BindValueForm(&b, r)
|
||||||
|
|
||||||
languages.SetTranslationFromRequest(viewLoginTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewLoginTemplate, r)
|
||||||
htv := UserLoginFormVariables{b, form.NewErrors(), NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := UserLoginFormVariables{b, form.NewErrors(), NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
|
|
||||||
err := viewLoginTemplate.ExecuteTemplate(w, "index.html", htv)
|
err := viewLoginTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
|
@ -65,14 +65,14 @@ func UserProfileHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if errUser != nil {
|
if errUser != nil {
|
||||||
err["errors"] = append(err["errors"], errUser.Error())
|
err["errors"] = append(err["errors"], errUser.Error())
|
||||||
}
|
}
|
||||||
languages.SetTranslationFromRequest(viewUserDeleteTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewUserDeleteTemplate, r)
|
||||||
htv := UserVerifyTemplateVariables{err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := UserVerifyTemplateVariables{err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
errorTmpl := viewUserDeleteTemplate.ExecuteTemplate(w, "index.html", htv)
|
errorTmpl := viewUserDeleteTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if errorTmpl != nil {
|
if errorTmpl != nil {
|
||||||
http.Error(w, errorTmpl.Error(), http.StatusInternalServerError)
|
http.Error(w, errorTmpl.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
T := languages.SetTranslationFromRequest(viewProfileTemplate, r, "en-us")
|
T := languages.SetTranslationFromRequest(viewProfileTemplate, r)
|
||||||
if follow != nil {
|
if follow != nil {
|
||||||
infosForm["infos"] = append(infosForm["infos"], fmt.Sprintf(T("user_followed_msg"), userProfile.Username))
|
infosForm["infos"] = append(infosForm["infos"], fmt.Sprintf(T("user_followed_msg"), userProfile.Username))
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ func UserProfileHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
languages.SetTranslationFromRequest(notFoundTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(notFoundTemplate, r)
|
||||||
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
@ -105,7 +105,7 @@ func UserDetailsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if userPermission.CurrentOrAdmin(currentUser, userProfile.ID) {
|
if userPermission.CurrentOrAdmin(currentUser, userProfile.ID) {
|
||||||
b := form.UserForm{}
|
b := form.UserForm{}
|
||||||
modelHelper.BindValueForm(&b, r)
|
modelHelper.BindValueForm(&b, r)
|
||||||
languages.SetTranslationFromRequest(viewProfileEditTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewProfileEditTemplate, r)
|
||||||
availableLanguages := languages.GetAvailableLanguages()
|
availableLanguages := languages.GetAvailableLanguages()
|
||||||
htv := UserProfileEditVariables{&userProfile, b, form.NewErrors(), form.NewInfos(), availableLanguages, NewSearchForm(), Navigation{}, currentUser, r.URL, mux.CurrentRoute(r)}
|
htv := UserProfileEditVariables{&userProfile, b, form.NewErrors(), form.NewInfos(), availableLanguages, NewSearchForm(), Navigation{}, currentUser, r.URL, mux.CurrentRoute(r)}
|
||||||
err := viewProfileEditTemplate.ExecuteTemplate(w, "index.html", htv)
|
err := viewProfileEditTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
|
@ -114,7 +114,7 @@ func UserDetailsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
languages.SetTranslationFromRequest(notFoundTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(notFoundTemplate, r)
|
||||||
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
@ -133,7 +133,7 @@ func UserProfileFormHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
b := form.UserForm{}
|
b := form.UserForm{}
|
||||||
err := form.NewErrors()
|
err := form.NewErrors()
|
||||||
infos := form.NewInfos()
|
infos := form.NewInfos()
|
||||||
T := languages.SetTranslationFromRequest(viewProfileEditTemplate, r, "en-us")
|
T := languages.SetTranslationFromRequest(viewProfileEditTemplate, r)
|
||||||
if len(r.PostFormValue("email")) > 0 {
|
if len(r.PostFormValue("email")) > 0 {
|
||||||
_, err = form.EmailValidation(r.PostFormValue("email"), err)
|
_, err = form.EmailValidation(r.PostFormValue("email"), err)
|
||||||
}
|
}
|
||||||
|
@ -173,14 +173,14 @@ func UserProfileFormHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
http.Error(w, errorTmpl.Error(), http.StatusInternalServerError)
|
http.Error(w, errorTmpl.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
languages.SetTranslationFromRequest(notFoundTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(notFoundTemplate, r)
|
||||||
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
languages.SetTranslationFromRequest(notFoundTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(notFoundTemplate, r)
|
||||||
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
err := notFoundTemplate.ExecuteTemplate(w, "index.html", NotFoundTemplateVariables{Navigation{}, NewSearchForm(), GetUser(r), r.URL, mux.CurrentRoute(r)})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), http.StatusInternalServerError)
|
http.Error(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
@ -209,7 +209,7 @@ func UserRegisterPostHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
err["errors"] = append(err["errors"], errorUser.Error())
|
err["errors"] = append(err["errors"], errorUser.Error())
|
||||||
}
|
}
|
||||||
if len(err) == 0 {
|
if len(err) == 0 {
|
||||||
languages.SetTranslationFromRequest(viewRegisterSuccessTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewRegisterSuccessTemplate, r)
|
||||||
u := model.User{
|
u := model.User{
|
||||||
Email: r.PostFormValue("email"), // indicate whether user had email set
|
Email: r.PostFormValue("email"), // indicate whether user had email set
|
||||||
}
|
}
|
||||||
|
@ -224,7 +224,7 @@ func UserRegisterPostHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
if len(err) > 0 {
|
if len(err) > 0 {
|
||||||
b.CaptchaID = captcha.GetID()
|
b.CaptchaID = captcha.GetID()
|
||||||
languages.SetTranslationFromRequest(viewRegisterTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewRegisterTemplate, r)
|
||||||
htv := UserRegisterTemplateVariables{b, err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := UserRegisterTemplateVariables{b, err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
errorTmpl := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv)
|
errorTmpl := viewRegisterTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if errorTmpl != nil {
|
if errorTmpl != nil {
|
||||||
|
@ -241,7 +241,7 @@ func UserVerifyEmailHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
if errEmail != nil {
|
if errEmail != nil {
|
||||||
err["errors"] = append(err["errors"], errEmail.Error())
|
err["errors"] = append(err["errors"], errEmail.Error())
|
||||||
}
|
}
|
||||||
languages.SetTranslationFromRequest(viewVerifySuccessTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewVerifySuccessTemplate, r)
|
||||||
htv := UserVerifyTemplateVariables{err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := UserVerifyTemplateVariables{err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
errorTmpl := viewVerifySuccessTemplate.ExecuteTemplate(w, "index.html", htv)
|
errorTmpl := viewVerifySuccessTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if errorTmpl != nil {
|
if errorTmpl != nil {
|
||||||
|
@ -259,7 +259,7 @@ func UserLoginPostHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
_, errorUser := userService.CreateUserAuthentication(w, r)
|
_, errorUser := userService.CreateUserAuthentication(w, r)
|
||||||
if errorUser != nil {
|
if errorUser != nil {
|
||||||
err["errors"] = append(err["errors"], errorUser.Error())
|
err["errors"] = append(err["errors"], errorUser.Error())
|
||||||
languages.SetTranslationFromRequest(viewLoginTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewLoginTemplate, r)
|
||||||
htv := UserLoginFormVariables{b, err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
htv := UserLoginFormVariables{b, err, NewSearchForm(), Navigation{}, GetUser(r), r.URL, mux.CurrentRoute(r)}
|
||||||
errorTmpl := viewLoginTemplate.ExecuteTemplate(w, "index.html", htv)
|
errorTmpl := viewLoginTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if errorTmpl != nil {
|
if errorTmpl != nil {
|
||||||
|
|
|
@ -34,7 +34,7 @@ func ViewHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
htv := ViewTemplateVariables{b, captchaID, NewSearchForm(), Navigation{}, user, r.URL, mux.CurrentRoute(r)}
|
htv := ViewTemplateVariables{b, captchaID, NewSearchForm(), Navigation{}, user, r.URL, mux.CurrentRoute(r)}
|
||||||
|
|
||||||
languages.SetTranslationFromRequest(viewTemplate, r, "en-us")
|
languages.SetTranslationFromRequest(viewTemplate, r)
|
||||||
err = viewTemplate.ExecuteTemplate(w, "index.html", htv)
|
err = viewTemplate.ExecuteTemplate(w, "index.html", htv)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("ViewHandler(): %s", err)
|
log.Errorf("ViewHandler(): %s", err)
|
||||||
|
|
|
@ -17,6 +17,17 @@ import (
|
||||||
"golang.org/x/crypto/bcrypt"
|
"golang.org/x/crypto/bcrypt"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func NewCurrentUserRetriever() *CurrentUserRetriever {
|
||||||
|
return &CurrentUserRetriever{}
|
||||||
|
}
|
||||||
|
|
||||||
|
type CurrentUserRetriever struct{}
|
||||||
|
|
||||||
|
func (*CurrentUserRetriever) RetrieveCurrentUser(r *http.Request) (model.User, error) {
|
||||||
|
user, _, err := RetrieveCurrentUser(r)
|
||||||
|
return user, err
|
||||||
|
}
|
||||||
|
|
||||||
// SuggestUsername suggest user's name if user's name already occupied.
|
// SuggestUsername suggest user's name if user's name already occupied.
|
||||||
func SuggestUsername(username string) string {
|
func SuggestUsername(username string) string {
|
||||||
var count int
|
var count int
|
||||||
|
@ -104,7 +115,7 @@ func CreateUser(w http.ResponseWriter, r *http.Request) (int, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return http.StatusInternalServerError, err
|
return http.StatusInternalServerError, err
|
||||||
}
|
}
|
||||||
if (registrationForm.Email != "") {
|
if registrationForm.Email != "" {
|
||||||
SendVerificationToUser(user, registrationForm.Email)
|
SendVerificationToUser(user, registrationForm.Email)
|
||||||
}
|
}
|
||||||
status, err = RegisterHandler(w, r)
|
status, err = RegisterHandler(w, r)
|
||||||
|
@ -185,7 +196,7 @@ func UpdateUser(w http.ResponseWriter, form *formStruct.UserForm, currentUser *m
|
||||||
form.Status = user.Status
|
form.Status = user.Status
|
||||||
form.Username = user.Username
|
form.Username = user.Username
|
||||||
}
|
}
|
||||||
if (form.Email != user.Email) {
|
if form.Email != user.Email {
|
||||||
// send verification to new email and keep old
|
// send verification to new email and keep old
|
||||||
SendVerificationToUser(user, form.Email)
|
SendVerificationToUser(user, form.Email)
|
||||||
form.Email = user.Email
|
form.Email = user.Email
|
||||||
|
@ -202,7 +213,7 @@ func DeleteUser(w http.ResponseWriter, currentUser *model.User, id string) (int,
|
||||||
if db.ORM.First(&user, id).RecordNotFound() {
|
if db.ORM.First(&user, id).RecordNotFound() {
|
||||||
return http.StatusNotFound, errors.New("user not found")
|
return http.StatusNotFound, errors.New("user not found")
|
||||||
}
|
}
|
||||||
if (user.ID == 0) {
|
if user.ID == 0 {
|
||||||
return http.StatusInternalServerError, errors.New("You can't delete that!")
|
return http.StatusInternalServerError, errors.New("You can't delete that!")
|
||||||
}
|
}
|
||||||
if db.ORM.Delete(&user).Error != nil {
|
if db.ORM.Delete(&user).Error != nil {
|
||||||
|
|
|
@ -11,16 +11,16 @@ import (
|
||||||
"github.com/ewhal/nyaa/db"
|
"github.com/ewhal/nyaa/db"
|
||||||
"github.com/ewhal/nyaa/model"
|
"github.com/ewhal/nyaa/model"
|
||||||
"github.com/ewhal/nyaa/util/email"
|
"github.com/ewhal/nyaa/util/email"
|
||||||
|
"github.com/ewhal/nyaa/util/languages"
|
||||||
"github.com/ewhal/nyaa/util/timeHelper"
|
"github.com/ewhal/nyaa/util/timeHelper"
|
||||||
"github.com/gorilla/securecookie"
|
"github.com/gorilla/securecookie"
|
||||||
"github.com/nicksnyder/go-i18n/i18n"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var verificationHandler = securecookie.New(config.EmailTokenHashKey, nil)
|
var verificationHandler = securecookie.New(config.EmailTokenHashKey, nil)
|
||||||
|
|
||||||
// SendEmailVerfication sends an email verification token via email.
|
// SendEmailVerfication sends an email verification token via email.
|
||||||
func SendEmailVerification(to string, token string, locale string) error {
|
func SendEmailVerification(to string, token string) error {
|
||||||
T, err := i18n.Tfunc(locale)
|
T, err := languages.GetDefaultTfunc()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ func SendVerificationToUser(user model.User, newEmail string) (int, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return http.StatusInternalServerError, err
|
return http.StatusInternalServerError, err
|
||||||
}
|
}
|
||||||
err = SendEmailVerification(newEmail, encoded, "en-us")
|
err = SendEmailVerification(newEmail, encoded)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return http.StatusInternalServerError, err
|
return http.StatusInternalServerError, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,7 +29,7 @@
|
||||||
<select id="language" name="language" class="form-control">
|
<select id="language" name="language" class="form-control">
|
||||||
{{ $userLanguage := .Language }}
|
{{ $userLanguage := .Language }}
|
||||||
{{ range $tag, $translatedName := $.Languages }}
|
{{ range $tag, $translatedName := $.Languages }}
|
||||||
<option value="{{ $tag }}" {{ if or (eq $userLanguage $tag) (and (eq $userLanguage "") (eq $tag "en-us")) }}selected{{end}}>{{ $translatedName }} {{if eq $tag "en-us"}}({{ T "default" }}){{end}}</option>
|
<option value="{{ $tag }}" {{ if or (eq $userLanguage $tag) (and (eq $userLanguage "") (eq $tag getDefaultLanguage)) }}selected{{end}}>{{ $translatedName }} {{if eq $tag getDefaultLanguage}}({{ T "default" }}){{end}}</option>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package languages
|
package languages
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"html/template"
|
"html/template"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
@ -8,13 +9,26 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/ewhal/nyaa/config"
|
"github.com/ewhal/nyaa/config"
|
||||||
"github.com/ewhal/nyaa/service/user"
|
"github.com/ewhal/nyaa/model"
|
||||||
"github.com/nicksnyder/go-i18n/i18n"
|
"github.com/nicksnyder/go-i18n/i18n"
|
||||||
"github.com/nicksnyder/go-i18n/i18n/language"
|
"github.com/nicksnyder/go-i18n/i18n/language"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// this interface is required to prevent a cyclic import between the languages and userService package.
|
||||||
|
type UserRetriever interface {
|
||||||
|
RetrieveCurrentUser(r *http.Request) (model.User, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
defaultLanguage string = config.DefaultI18nConfig.DefaultLanguage
|
||||||
|
userRetriever UserRetriever = nil
|
||||||
|
)
|
||||||
|
|
||||||
// Initialize the languages translation
|
// Initialize the languages translation
|
||||||
func InitI18n(conf config.I18nConfig) error {
|
func InitI18n(conf config.I18nConfig, retriever UserRetriever) error {
|
||||||
|
defaultLanguage = conf.DefaultLanguage
|
||||||
|
userRetriever = retriever
|
||||||
|
|
||||||
defaultFilepath := path.Join(conf.TranslationsDirectory, conf.DefaultLanguage+".all.json")
|
defaultFilepath := path.Join(conf.TranslationsDirectory, conf.DefaultLanguage+".all.json")
|
||||||
err := i18n.LoadTranslationFile(defaultFilepath)
|
err := i18n.LoadTranslationFile(defaultFilepath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -26,16 +40,20 @@ func InitI18n(conf config.I18nConfig) error {
|
||||||
return fmt.Errorf("failed to get translation files: %v", err)
|
return fmt.Errorf("failed to get translation files: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, path := range paths {
|
for _, file := range paths {
|
||||||
err := i18n.LoadTranslationFile(path)
|
err := i18n.LoadTranslationFile(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to load translation file '%s': %v", path, err)
|
return fmt.Errorf("failed to load translation file '%s': %v", file, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetDefaultLanguage() string {
|
||||||
|
return defaultLanguage
|
||||||
|
}
|
||||||
|
|
||||||
// When go-i18n finds a language with >0 translations, it uses it as the Tfunc
|
// When go-i18n finds a language with >0 translations, it uses it as the Tfunc
|
||||||
// However, if said language has a missing translation, it won't fallback to the "main" language
|
// However, if said language has a missing translation, it won't fallback to the "main" language
|
||||||
func TfuncAndLanguageWithFallback(language string, languages ...string) (i18n.TranslateFunc, *language.Language, error) {
|
func TfuncAndLanguageWithFallback(language string, languages ...string) (i18n.TranslateFunc, *language.Language, error) {
|
||||||
|
@ -89,9 +107,15 @@ func setTranslation(tmpl *template.Template, T i18n.TranslateFunc) {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetTfuncAndLanguageFromRequest(r *http.Request, defaultLanguage string) (T i18n.TranslateFunc, Tlang *language.Language) {
|
func GetDefaultTfunc() (i18n.TranslateFunc, error) {
|
||||||
|
return i18n.Tfunc(defaultLanguage)
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetTfuncAndLanguageFromRequest(r *http.Request) (T i18n.TranslateFunc, Tlang *language.Language) {
|
||||||
|
defaultLanguage := GetDefaultLanguage()
|
||||||
|
|
||||||
userLanguage := ""
|
userLanguage := ""
|
||||||
user, _, err := userService.RetrieveCurrentUser(r)
|
user, err := getCurrentUser(r)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
userLanguage = user.Language
|
userLanguage = user.Language
|
||||||
}
|
}
|
||||||
|
@ -108,9 +132,17 @@ func GetTfuncAndLanguageFromRequest(r *http.Request, defaultLanguage string) (T
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetTranslationFromRequest(tmpl *template.Template, r *http.Request, defaultLanguage string) i18n.TranslateFunc {
|
func SetTranslationFromRequest(tmpl *template.Template, r *http.Request) i18n.TranslateFunc {
|
||||||
r.Header.Add("Vary", "Accept-Encoding")
|
r.Header.Add("Vary", "Accept-Encoding")
|
||||||
T, _ := GetTfuncAndLanguageFromRequest(r, defaultLanguage)
|
T, _ := GetTfuncAndLanguageFromRequest(r)
|
||||||
setTranslation(tmpl, T)
|
setTranslation(tmpl, T)
|
||||||
return T
|
return T
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getCurrentUser(r *http.Request) (model.User, error) {
|
||||||
|
if userRetriever == nil {
|
||||||
|
return model.User{}, errors.New("failed to get current user: no user retriever set")
|
||||||
|
}
|
||||||
|
|
||||||
|
return userRetriever.RetrieveCurrentUser(r)
|
||||||
|
}
|
||||||
|
|
|
@ -10,8 +10,9 @@ import (
|
||||||
func TestInitI18n(t *testing.T) {
|
func TestInitI18n(t *testing.T) {
|
||||||
conf := config.DefaultI18nConfig
|
conf := config.DefaultI18nConfig
|
||||||
conf.TranslationsDirectory = path.Join("..", "..", conf.TranslationsDirectory)
|
conf.TranslationsDirectory = path.Join("..", "..", conf.TranslationsDirectory)
|
||||||
|
var retriever UserRetriever = nil // not required during initialization
|
||||||
|
|
||||||
err := InitI18n(conf)
|
err := InitI18n(conf, retriever)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("failed to initialize language translations: %v", err)
|
t.Errorf("failed to initialize language translations: %v", err)
|
||||||
}
|
}
|
||||||
|
|
Référencer dans un nouveau ticket