func (ms *MergeStrings) combineStringInfosPerDirectory(directory string) error { files, directories := getFilesAndDir(directory) fileList := ms.matchFileToSourceLanguage(files, ms.SourceLanguage) combinedMap := map[string]common.I18nStringInfo{} for _, file := range fileList { StringInfos, err := common.LoadI18nStringInfos(file) if err != nil { return err } combineStringInfo(StringInfos, combinedMap) } filePath := filepath.Join(directory, ms.SourceLanguage+".all.json") ms.I18nStringInfos = common.I18nStringInfoMapValues2Array(combinedMap) sort.Sort(ms) common.SaveI18nStringInfos(ms, ms.Options(), ms.I18nStringInfos, filePath) ms.Println("i18n4go: saving combined language file: " + filePath) if ms.Recurse { for _, directory = range directories { err := ms.combineStringInfosPerDirectory(directory) if err != nil { return err } } } return nil }
func (ct *createTranslations) createTranslationFileWithGoogleTranslate(language string) (string, error) { fileName, _, err := common.CheckFile(ct.Filename) if err != nil { return "", err } err = common.CreateOutputDirsIfNeeded(ct.OutputDirname) if err != nil { ct.Println(err) return "", fmt.Errorf("i18n4go: could not create output directory: %s", ct.OutputDirname) } destFilename := filepath.Join(ct.OutputDirname, strings.Replace(fileName, ct.options.SourceLanguageFlag, language, -1)) i18nStringInfos, err := common.LoadI18nStringInfos(ct.Filename) if err != nil { ct.Println(err) return "", fmt.Errorf("i18n4go: could not load i18n strings from file: %s", ct.Filename) } if len(i18nStringInfos) == 0 { return "", fmt.Errorf("i18n4go: input file: %s is empty", ct.Filename) } ct.Println("i18n4go: attempting to use Google Translate to translate source strings in: ", language) modifiedI18nStringInfos := make([]common.I18nStringInfo, len(i18nStringInfos)) for i, i18nStringInfo := range i18nStringInfos { translation, _, err := ct.googleTranslate(i18nStringInfo.Translation, language) if err != nil { ct.Println("i18n4go: error invoking Google Translate for string:", i18nStringInfo.Translation) } else { modifiedI18nStringInfos[i] = common.I18nStringInfo{ID: i18nStringInfo.ID, Translation: translation} } } err = common.SaveI18nStringInfos(ct, ct.Options(), modifiedI18nStringInfos, destFilename) if err != nil { ct.Println(err) return "", fmt.Errorf("i18n4go: could not save Google Translate i18n strings to file: %s", destFilename) } if ct.options.PoFlag { poFilename := destFilename[:len(destFilename)-len(".json")] + ".po" err = common.SaveI18nStringsInPo(ct, ct.Options(), modifiedI18nStringInfos, poFilename) if err != nil { ct.Println(err) return "", fmt.Errorf("i18n4go: could not save PO file: %s", poFilename) } } ct.Println() return destFilename, nil }
func (vs *verifyStrings) generateInvalidTranslationDiffFile(invalidStringInfos []common.I18nStringInfo, fileName string) (string, error) { name, pathName, err := common.CheckFile(fileName) if err != nil { return "", err } diffFilename := name + ".invalid.diff.json" if vs.OutputDirname != "" { common.CreateOutputDirsIfNeeded(vs.OutputDirname) diffFilename = filepath.Join(vs.OutputDirname, diffFilename) } else { diffFilename = filepath.Join(pathName, diffFilename) } return diffFilename, common.SaveI18nStringInfos(vs, vs.Options(), invalidStringInfos, diffFilename) }
func (rp *rewritePackage) processFilename(fileName string) error { rp.TotalFiles += 1 rp.Println("i18n4go: rewriting strings for source file:", fileName) fileSet := token.NewFileSet() var absFilePath = fileName if !filepath.IsAbs(absFilePath) { absFilePath = filepath.Join(os.Getenv("PWD"), absFilePath) } astFile, err := parser.ParseFile(fileSet, absFilePath, nil, parser.ParseComments|parser.AllErrors) if err != nil { rp.Println(err) return err } if strings.HasSuffix(fileName, "_test.go") { rp.Println("cowardly refusing to translate the strings in test file:", fileName) return nil } importPath, err := rp.determineImportPath(absFilePath) if err != nil { rp.Println("i18n4go: error determining the import path:", err.Error()) return err } if rp.OutputDirname == "" { rp.OutputDirname = filepath.Dir(fileName) } outputDir := filepath.Join(rp.OutputDirname, filepath.Dir(rp.relativePathForFile(fileName))) err = rp.addInitFuncToPackage(astFile.Name.Name, outputDir, importPath) if err != nil { rp.Println("i18n4go: error adding init() func to package:", err.Error()) return err } err = rp.insertTFuncCall(astFile) if err != nil { rp.Println("i18n4go: error appending T() to AST file:", err.Error()) return err } relativeFilePath := rp.relativePathForFile(fileName) err = rp.saveASTFile(relativeFilePath, fileName, astFile, fileSet) if err != nil { rp.Println("i18n4go: error saving AST file:", err.Error()) return err } if rp.SaveExtractedStrings { i18nStringInfos := common.I18nStringInfoMapValues2Array(rp.UpdatedExtractedStrings) err := common.SaveI18nStringInfos(rp, rp.Options(), i18nStringInfos, rp.I18nStringsFilename) if err != nil { rp.Println("i18n4go: error saving updated i18n strings file:", err.Error()) return err } } return err }