#!/usr/local/bin/lua -- CONFIG -- --[[ The name of the AceLocale-3.0 Category, as being used in :NewLocale and :GetLocale ]] local localeName = "Bartender4" --[[ Prefix to all files if this script is run from a subdir, for example ]] local filePrefix = "../" --[[ List of all files to parse ]] local files = { "ActionBar.lua", "ActionBars.lua", "ActionBarStates.lua", "ActionButton.lua", "BagBar.lua", "Bar.lua", "Bartender4.lua", "ButtonBar.lua", "MicroMenu.lua", "PetBar.lua", "PetButton.lua", "StanceBar.lua", -- "Options/ActionBar.lua", "Options/ActionBarStates.lua", "Options/BagBar.lua", "Options/Bar.lua", "Options/ButtonBar.lua", "Options/MicroMenu.lua", "Options/PetBar.lua", "Options/StanceBar.lua", "Options/Options.lua", } --[[ The Language your addon was originally written in ]] local baseLocale = "enUS" --[[ The supported Languages -- DO NOT INCLUDE the base locale here! ]] local locale = { "deDE", "frFR", "esES", "esMX", "zhCN", "zhTW", "koKR", "ruRU" } -- CODE -- local strings = {} -- extract data from specified lua files for idx,filename in pairs(files) do local file = io.open(string.format("%s%s", filePrefix or "", filename), "r") assert(file, "Could not open " .. filename) local text = file:read("*all") for match in string.gmatch(text, "L%[\"(.-)\"%]") do strings[match] = true end end local work = {} for k,v in pairs(strings) do table.insert(work, k) end table.sort(work) local AceLocaleHeader = "local L =" local BabbleFishHeader = "L = {} -- " local function replaceHeader(content) return content:gsub(AceLocaleHeader, BabbleFishHeader):gsub("\\", "\\\\"):gsub("\\\"", "\\\\\"") end local localizedStrings = {} table.insert(locale, baseLocale) -- load existing data from locale files for idx, lang in ipairs(locale) do local file = io.open(lang .. ".lua", "r") assert(file, "Could not open ".. lang .. ".lua for reading") local content = file:read("*all") content = replaceHeader(content) assert(loadstring(content))() localizedStrings[lang] = L file:close() end table.remove(locale) -- Write enUS file local file = io.open(string.format("%s.lua", baseLocale), "w") assert(file, "Could not open enUS.lua for writing") file:write("-- Generated by Babelfish script, do not edit directly.\n") file:write(string.format("local L = LibStub(\"AceLocale-3.0\"):NewLocale(\"%s\", \"%s\", true)\n", localeName, baseLocale)) file:write("\n\n") for idx, match in ipairs(work) do local value = "true" if type(localizedStrings[baseLocale][match]) == "string" then value = string.format("\"%s\"", localizedStrings[baseLocale][match]) end file:write(string.format("L[\"%s\"] = %s\n", match, value)) end file:close() -- Write locale files for idx, lang in ipairs(locale) do local file = io.open(lang .. ".lua", "w") assert(file, "Could not open ".. lang .. ".lua for writing") file:write("-- Please make sure to save the file as UTF-8, BUT WITHOUT THE UTF-8 BOM HEADER; ΒΆ\n") file:write(string.format("local L = LibStub(\"AceLocale-3.0\"):NewLocale(\"%s\", \"%s\")\n", localeName, lang)) file:write("if not L then return end\n") file:write("\n") local L = localizedStrings[lang] for idx, match in ipairs(work) do if type(L[match]) == "string" then file:write(string.format("L[\"%s\"] = \"%s\"\n", match, L[match])) else local value = "true" if type(localizedStrings[baseLocale][match]) == "string" then value = string.format("\"%s\"", localizedStrings[baseLocale][match]) end file:write(string.format("-- L[\"%s\"] = %s\n", match, value)) end end file:close() end