first commit
This commit is contained in:
commit
6cb67a6f35
27
main.go
Normal file
27
main.go
Normal file
@ -0,0 +1,27 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"po2json/po2json"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
func main(){
|
||||
|
||||
//locales := []string{"en_UK", "eu_ES"}
|
||||
locales := []string {}
|
||||
domain := "base"
|
||||
localedir := "locales"
|
||||
files,_ := ioutil.ReadDir(localedir)
|
||||
for _, f := range files {
|
||||
if f.IsDir() {
|
||||
fmt.Println(f.Name())
|
||||
locales = append(locales, f.Name(),)
|
||||
}
|
||||
}
|
||||
|
||||
//fmt.Println(po2json.PO2JSON([]string{locales[0], locales[1]}, domain, localedir))
|
||||
fmt.Println(po2json.PO2JSON(locales, domain, localedir))
|
||||
|
||||
}
|
||||
|
65
po2json/po2json.go
Normal file
65
po2json/po2json.go
Normal file
@ -0,0 +1,65 @@
|
||||
package po2json
|
||||
|
||||
import "regexp"
|
||||
import "io/ioutil"
|
||||
import "encoding/json"
|
||||
import "strings"
|
||||
|
||||
type msgIdStrPairs map[string]string
|
||||
type localesMsg map[string]msgIdStrPairs
|
||||
|
||||
//const pattern = `msgid "(.+)"\nmsgstr "(.+)"`
|
||||
//const patternP = `msgid "(.+)"\nmsgid_plural "(.+)"\nmsgstr\[.\] "(.+)"\nmsgstr\[.\] "(.+)"`
|
||||
var pattern = [2] string {`msgid "(.+)"\nmsgstr "(.+)"`,`msgid "(.+)"\nmsgid_plural "(.+)"\nmsgstr\[.\] "(.+)"\nmsgstr\[.\] "(.+)"`}
|
||||
|
||||
func getPOPath(locale, domain, localedir string) string {
|
||||
return localedir + "/" + locale + "/LC_MESSAGES/" + domain + ".po"
|
||||
}
|
||||
|
||||
func extractFromPOFile(popath string) msgIdStrPairs {
|
||||
buf, err := ioutil.ReadFile(popath)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
pairs := msgIdStrPairs{}
|
||||
|
||||
for j:= 0; j < 2; j++{
|
||||
re := regexp.MustCompile(pattern[j])
|
||||
matches := re.FindAllStringSubmatch(string(buf), -1)
|
||||
|
||||
if(strings.Count(pattern[j], "msg") == 4 ){
|
||||
for _, array := range matches {
|
||||
pairs[array[1]] = array[3]
|
||||
pairs[array[2]] = array[4]
|
||||
}
|
||||
}else{
|
||||
for _, array := range matches {
|
||||
pairs[array[1]] = array[2]
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return pairs
|
||||
}
|
||||
|
||||
func PO2JSON(locales []string, domain, localedir string) string {
|
||||
// create PO-like json data for i18n
|
||||
obj := localesMsg{}
|
||||
for _, locale := range locales {
|
||||
// English is default language
|
||||
if locale == "en_US" {
|
||||
continue
|
||||
}
|
||||
|
||||
obj[locale] = extractFromPOFile(getPOPath(locale, domain, localedir))
|
||||
}
|
||||
|
||||
b, err := json.Marshal(obj)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return string(b)
|
||||
}
|
Loading…
Reference in New Issue
Block a user