compile pofile in backend

This commit is contained in:
0xJacky 2022-02-19 10:44:28 +08:00
parent 35d144c678
commit 9940c0ad36
18 changed files with 99 additions and 183 deletions

View file

@ -1,6 +1,26 @@
package frontend
import "embed"
import (
"embed"
"github.com/0xJacky/pofile"
"log"
"path"
)
//go:embed dist
var DistFS embed.FS
var Translations pofile.Dict
func InitTranslations() {
lang := []string{"zh_CN", "zh_TW", "en"}
Translations = make(pofile.Dict)
for _, v := range lang {
p, err := pofile.Parse(path.Join("frontend", "src", "locale", v, "LC_MESSAGES", "app.po"))
if err != nil {
log.Fatalln(err)
}
Translations[p.Header.Language] = make(pofile.Dict)
Translations[p.Header.Language] = p.ToDict()
}
}

View file

@ -1,17 +1,24 @@
export const settings = {
namespace: true,
state: {
language: ''
language: '',
translations: {},
},
mutations: {
set_language(state, payload) {
state.language = payload
},
update_translations(state, payload) {
state.translations = payload
}
},
actions: {
set_language({commit}, data) {
commit('set_language', data)
},
update_translations({commit}, data) {
commit('update_translations', data)
}
},
getters: {
current_language(state) {

View file

@ -1,7 +1,6 @@
import {translate} from 'vue-gettext'
import store from '@/lib/store'
import {availableLanguages} from '@/lib/translate/index'
import translations from '@/translations.json'
let lang = window.navigator.language
if (!lang.includes('zh')) {
@ -24,6 +23,6 @@ const {
gettext: $gettext,
} = translate
translate.initTranslations(translations, config)
translate.initTranslations(store.state.settings.translations, config)
export default $gettext

View file

@ -110,11 +110,7 @@ msgstr ""
msgid "Uptime"
msgstr ""
#: src/views/dashboard/DashBoard.vue:94
msgid "Used:"
msgstr ""
#: src/views/dashboard/DashBoard.vue:123
#: src/views/dashboard/DashBoard.vue:94 src/views/dashboard/DashBoard.vue:123
msgid "Used:"
msgstr ""

View file

@ -112,11 +112,7 @@ msgstr "总共: "
msgid "Uptime"
msgstr "运行时间"
#: src/views/dashboard/DashBoard.vue:94
msgid "Used:"
msgstr "已使用:"
#: src/views/dashboard/DashBoard.vue:123
#: src/views/dashboard/DashBoard.vue:94 src/views/dashboard/DashBoard.vue:123
msgid "Used:"
msgstr "已使用:"

View file

@ -1,125 +0,0 @@
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: Automatically generated\n"
"Language-Team: none\n"
"Language: zh_CN\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: easygettext\n"
"X-Generator: Poedit 3.0.1\n"
#: src/router/index.js:98
msgid "404 Not Found"
msgstr "404 找不到页面"
#: src/router/index.js:76
msgid "About"
msgstr "关于"
#: src/router/index.js:47
msgid "Add Sites"
msgstr "添加站点"
#: src/views/dashboard/DashBoard.vue:94
msgid "Cached: "
msgstr "缓存: "
#: src/router/index.js:60
msgid "Config"
msgstr "配置"
#: src/router/index.js:19
msgid "Dashboard"
msgstr "仪表盘"
#: src/router/index.js:124
msgid "Detected version update, this page will automatically refresh."
msgstr "检测到版本更新,页面将会自动刷新。"
#: src/views/dashboard/DashBoard.vue:95
msgid "Free:"
msgstr "空闲:"
#: src/router/index.js:12
msgid "Home"
msgstr "首页"
#: src/router/index.js:86
msgid "Install"
msgstr "安装"
#: src/views/dashboard/DashBoard.vue:13
msgid "Load averages"
msgstr "系统负载"
#: src/router/index.js:92
msgid "Login"
msgstr "登录"
#: src/views/dashboard/DashBoard.vue:23
msgid "Memory"
msgstr "内存"
#: src/router/index.js:68
msgid "Modify Config"
msgstr "配置修改"
#: src/router/index.js:51
msgid "Modify Sites"
msgstr "站点修改"
#: src/router/index.js:104
msgid "Not Found"
msgstr "找不到页面"
#: src/router/index.js:128
msgid "OK"
msgstr "好的"
#: src/views/dashboard/DashBoard.vue:96
msgid "Physical memory:"
msgstr "物理内存:"
#: src/views/dashboard/DashBoard.vue:38
msgid "Server status"
msgstr "服务器状态"
#: src/router/index.js:35
msgid "Sites"
msgstr "站点"
#: src/router/index.js:43
msgid "Sites List"
msgstr "站点列表"
#: src/views/dashboard/DashBoard.vue:32
msgid "Storage"
msgstr "存储"
#: src/router/index.js:123
msgid "System message"
msgstr "系统消息"
#: src/views/dashboard/DashBoard.vue:124
msgid "Total: "
msgstr "总共: "
#: src/views/dashboard/DashBoard.vue:12
msgid "Uptime"
msgstr "运行时间"
#: src/views/dashboard/DashBoard.vue:94
msgid "Used:"
msgstr "已使用:"
#: src/views/dashboard/DashBoard.vue:123
msgid "Used: "
msgstr "已使用: "
#: src/router/index.js:27
msgid "Users"
msgstr "用户"

View file

@ -109,11 +109,7 @@ msgstr ""
msgid "Uptime"
msgstr ""
#: src/views/dashboard/DashBoard.vue:94
msgid "Used:"
msgstr ""
#: src/views/dashboard/DashBoard.vue:123
#: src/views/dashboard/DashBoard.vue:94 src/views/dashboard/DashBoard.vue:123
msgid "Used:"
msgstr ""

View file

@ -11,7 +11,7 @@ import utils from '@/lib/utils'
import api from '@/api'
import GetTextPlugin from 'vue-gettext'
import {availableLanguages} from '@/lib/translate'
import translations from '@/translations.json'
import http from '@/lib/http'
Vue.use(utils)
@ -23,10 +23,14 @@ Vue.prototype.$api = api
Vue.use(GetTextPlugin, {
availableLanguages,
defaultLanguage: store.getters.current_language,
translations: translations,
translations: store.state.settings.translations,
silent: true
})
http.get('/translations.json').then(r => {
store.commit('update_translations', r)
})
NProgress.configure({
easing: 'ease',
speed: 500,

View file

@ -1 +0,0 @@
{"en":{},"zh_CN":{"404 Not Found":"404 找不到页面","About":"关于","Add Sites":"添加站点","Cached:":"缓存:","Config":"配置","Dashboard":"仪表盘","Detected version update, this page will automatically refresh.":"检测到版本更新,页面将会自动刷新。","Free:":"空闲:","Home":"首页","Install":"安装","Load averages":"系统负载","Login":"登录","Memory":"内存","Modify Config":"配置修改","Modify Sites":"站点修改","Not Found":"找不到页面","OK":"好的","Physical memory:":"物理内存:","Server status":"服务器状态","Sites":"站点","Sites List":"站点列表","Storage":"存储","System message":"系统消息","Total: ":"总共: ","Uptime":"运行时间","Used:":"已使用:","Used: ":"已使用: ","Users":"用户"},"zh_TW":{}}

3
go.mod
View file

@ -23,11 +23,13 @@ require (
)
require (
github.com/0xJacky/pofile v0.0.0-20220219022008-df96416310e5 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/cenkalti/backoff/v4 v4.1.0 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-ole/go-ole v1.2.5 // indirect
github.com/golang/protobuf v1.3.4 // indirect
github.com/itchyny/timefmt-go v0.1.3 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.2 // indirect
github.com/json-iterator/go v1.1.9 // indirect
@ -37,6 +39,7 @@ require (
github.com/miekg/dns v1.1.40 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/tklauser/go-sysconf v0.3.7 // indirect
github.com/tklauser/numcpus v0.2.3 // indirect
github.com/ugorji/go/codec v1.1.7 // indirect

7
go.sum
View file

@ -23,6 +23,10 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
contrib.go.opencensus.io/exporter/ocagent v0.4.12/go.mod h1:450APlNTSR6FrvC3CTRqYosuDstRB9un7SOx2k/9ckA=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/0xJacky/pofile v0.0.0-20220216140954-bc565a3feb80 h1:qKPxkbGoP/vVxN1Vgd964oJBlhGwhrCAKiheoieOPhc=
github.com/0xJacky/pofile v0.0.0-20220216140954-bc565a3feb80/go.mod h1:gSDWobvodMtvwh7FE/F999AQoCwBoXgzyGffYFX9nKA=
github.com/0xJacky/pofile v0.0.0-20220219022008-df96416310e5 h1:NEsbh2Wez8+0Y72hbVQPPhyIkmc1RAgWOWbcISRUxEs=
github.com/0xJacky/pofile v0.0.0-20220219022008-df96416310e5/go.mod h1:gSDWobvodMtvwh7FE/F999AQoCwBoXgzyGffYFX9nKA=
github.com/Azure/azure-sdk-for-go v32.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-autorest/autorest v0.1.0/go.mod h1:AKyIcETwSUFxIcs/Wnq/C+kwCtlEYGUVd7FPNb2slmg=
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
@ -225,6 +229,8 @@ github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:
github.com/iij/doapi v0.0.0-20190504054126-0bbf12d6d7df/go.mod h1:QMZY7/J/KSQEhKWFeDesPjMj+wCHReeknARU3wqlyN4=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/infobloxopen/infoblox-go-client v1.1.1/go.mod h1:BXiw7S2b9qJoM8MS40vfgCNB2NLHGusk1DtO16BD9zI=
github.com/itchyny/timefmt-go v0.1.3 h1:7M3LGVDsqcd0VZH2U+x393obrzZisp7C0uEe921iRkU=
github.com/itchyny/timefmt-go v0.1.3/go.mod h1:0osSSCQSASBJMsIZnhAaF1C2fCBTJZXrnj37mG8/c+A=
github.com/jarcoal/httpmock v1.0.6/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
@ -335,6 +341,7 @@ github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrap
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=

View file

@ -3,6 +3,7 @@ package main
import (
"context"
"flag"
"github.com/0xJacky/Nginx-UI/frontend"
"github.com/0xJacky/Nginx-UI/server/model"
"github.com/0xJacky/Nginx-UI/server/router"
"github.com/0xJacky/Nginx-UI/server/settings"
@ -32,6 +33,7 @@ func main() {
log.Printf("nginx config dir path: %s", tool2.GetNginxConfPath(""))
if "" != settings.ServerSettings.JwtSecret {
model.Init()
frontend.InitTranslations()
go tool2.AutoCert()
}

View file

@ -0,0 +1,11 @@
package api
import (
"github.com/0xJacky/Nginx-UI/frontend"
"github.com/gin-gonic/gin"
"net/http"
)
func GetTranslations(c *gin.Context) {
c.JSON(http.StatusOK, frontend.Translations)
}

View file

@ -2,7 +2,7 @@ package router
import (
"bufio"
api2 "github.com/0xJacky/Nginx-UI/server/api"
"github.com/0xJacky/Nginx-UI/server/api"
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
"net/http"
@ -29,46 +29,47 @@ func InitRouter() *gin.Engine {
g := r.Group("/api")
{
g.GET("install", api2.InstallLockCheck)
g.POST("install", api2.InstallNginxUI)
g.GET("translations.json", api.GetTranslations)
g.GET("install", api.InstallLockCheck)
g.POST("install", api.InstallNginxUI)
g.POST("/login", api2.Login)
g.DELETE("/logout", api2.Logout)
g.POST("/login", api.Login)
g.DELETE("/logout", api.Logout)
g := g.Group("/", authRequired())
{
g.GET("/analytic", api2.Analytic)
g.GET("/analytic", api.Analytic)
g.GET("/users", api2.GetUsers)
g.GET("/user/:id", api2.GetUser)
g.POST("/user", api2.AddUser)
g.POST("/user/:id", api2.EditUser)
g.DELETE("/user/:id", api2.DeleteUser)
g.GET("/users", api.GetUsers)
g.GET("/user/:id", api.GetUser)
g.POST("/user", api.AddUser)
g.POST("/user/:id", api.EditUser)
g.DELETE("/user/:id", api.DeleteUser)
g.GET("domains", api2.GetDomains)
g.GET("domain/:name", api2.GetDomain)
g.POST("domain/:name", api2.EditDomain)
g.POST("domain/:name/enable", api2.EnableDomain)
g.POST("domain/:name/disable", api2.DisableDomain)
g.DELETE("domain/:name", api2.DeleteDomain)
g.GET("domains", api.GetDomains)
g.GET("domain/:name", api.GetDomain)
g.POST("domain/:name", api.EditDomain)
g.POST("domain/:name/enable", api.EnableDomain)
g.POST("domain/:name/disable", api.DisableDomain)
g.DELETE("domain/:name", api.DeleteDomain)
g.GET("configs", api2.GetConfigs)
g.GET("config/:name", api2.GetConfig)
g.POST("config", api2.AddConfig)
g.POST("config/:name", api2.EditConfig)
g.GET("configs", api.GetConfigs)
g.GET("config/:name", api.GetConfig)
g.POST("config", api.AddConfig)
g.POST("config/:name", api.EditConfig)
g.GET("backups", api2.GetFileBackupList)
g.GET("backup/:id", api2.GetFileBackup)
g.GET("backups", api.GetFileBackupList)
g.GET("backup/:id", api.GetFileBackup)
g.GET("template/:name", api2.GetTemplate)
g.GET("template/:name", api.GetTemplate)
g.GET("cert/issue/:domain", api2.IssueCert)
g.GET("cert/:domain/info", api2.CertInfo)
g.GET("cert/issue/:domain", api.IssueCert)
g.GET("cert/:domain/info", api.CertInfo)
// 添加域名到自动续期列表
g.POST("cert/:domain", api2.AddDomainToAutoCert)
g.POST("cert/:domain", api.AddDomainToAutoCert)
// 从自动续期列表中删除域名
g.DELETE("cert/:domain", api2.RemoveDomainFromAutoCert)
g.DELETE("cert/:domain", api.RemoveDomainFromAutoCert)
}
}