2

[Golang] Convert Traditional Chinese PO file to Simplified Chinese

 3 years ago
source link: http://siongui.github.io/2016/03/05/go-convert-zhtw-po-file-to-zhcn/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Automatically convert Traditional Chinese (zh_TW) PO file to Simplified Chinese (zh_CN) by OpenCC and OpenCC Go binding.

Install Necessary Tool

$ sudo apt-get install opencc libopencc-dev
$ go get -u github.com/siongui/go-opencc

Source Code

package main

import (
      "bufio"
      "fmt"
      "github.com/siongui/go-opencc"
      "os"
      "path/filepath"
      "strings"
)

var ct2s = opencc.NewConverter("zht2zhs.ini")

func File2lines(filePath string) []string {
      f, err := os.Open(filePath)
      if err != nil {
              panic(err)
      }
      defer f.Close()

      var lines []string
      scanner := bufio.NewScanner(f)
      for scanner.Scan() {
              lines = append(lines, scanner.Text())
      }
      if err := scanner.Err(); err != nil {
              fmt.Fprintln(os.Stderr, err)
              panic(err)
      }

      return lines
}

func main() {
      twPOPath := "locale/zh_TW/LC_MESSAGES/messages.po"
      cnPOPath := "locale/zh_CN/LC_MESSAGES/messages.po"
      defer ct2s.Close()

      os.MkdirAll(filepath.Dir(cnPOPath), 0755)
      fo, err := os.Create(cnPOPath)
      if err != nil {
              fmt.Fprintln(os.Stderr, err)
              panic(err)
      }
      defer fo.Close()

      for _, line := range File2lines(twPOPath) {
              if strings.HasPrefix(line, "msgstr") {
                      fo.Write([]byte(ct2s.Convert(line)))
              } else {
                      if strings.Contains(line, "zh_TW") {
                              fo.Write([]byte(strings.Replace(line, "zh_TW", "zh_CN", 1)))
                      } else {
                              fo.Write([]byte(line))
                      }
              }
              fo.Write([]byte("\n"))
      }
}

Tested on: Ubuntu Linux 15.10, Go 1.6, opencc 0.4.3-2build1, GitHub: siongui/go-opencc.


References:

[1][Python] Automatically Convert Traditional Chinese PO file to Simplified Chinese

[2]create zh_CN PO from zh_TW · siongui/pali@365d46c · GitHub


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK