Welcome Guest, Not a member yet? Register   Sign In
Language Files Check
#1

[eluser]Unknown[/eluser]
Hi people!

I just needed something to check if my language files are OK, with no entry missing, so i coded it in Python. It's very VERY quick'n'dirty, but just in case any of you needed it.

Code:
#!/usr/bin/python
# coding=utf-8

# CodeIgniter language file checker
# Author: FX <[email protected]>

import os
import os.path
import re
import sys

class Colors:
    ERROR = '\033[31m'
    INFO = '\033[33m'
    OK = '\033[32m'
    BOLD_ON = '\033[1m'
    BOLD_OFF = '\033[22m'
    END = '\033[0m'

class LanguageField:
    def __init__ (self, name):
        self.languages = set()
        self.name = name

    def has (self, lang):
        return lang in self.languages

class LanguageFile:
    def __init__ (self, root, path, name):
        self.languages = set()
        self.path = path
        self.name = name
        self.root = root

    def check (self, langset):
        fields = dict()

        for lang in self.languages:
            f = open (os.path.join (self.root, lang, self.path, self.name))
            for l in f:
                ma = re.match (r'^\$lang\[(\"|')(?P<key>.*?)(\"|')\] *= *(\"|')(?P<value>.*)(\"|');$', l) #'
                if not ma is None:
                    val = ma.group('value')
                    key = ma.group('key')

                    if not key in fields:
                        fields[key] = LanguageField (key)

                    fields[key].languages.add (lang)
            f.close()

        return fields

def listfiles (d):
    entries = dict()
    for root,dirs,files in os.walk(d):
        # First subdir under base directory is the language dir, then normal path
        ma   = re.match (re.escape (d) + "/?(?P<lang>[^/]*)/?(?P<path>.*)", root)
        if not ma is None:
            lang = ma.group('lang')
            path = ma.group('path')

            for f in files:
                if re.match (r"^.*_lang\.php$", f) != None:
                    if not entries.has_key (f):
                        lf = LanguageFile(d, path, f)
                        entries[f] = lf
                    else:
                        lf = entries[f]

                    lf.languages.add(lang)
    return entries

def main ():
    # Path is current path if no path is provided
    if len(sys.argv) < 2:
        path = '.'
    else:
        path = sys.argv[1]

    # List language files
    files = listfiles (sys.argv[1])

    # Language set
    langset = set(['en', 'fr'])

    # Read each language file, and test if the arrays are the same
    for l in files.values():
        print ""
        print (Colors.BOLD_ON + Colors.INFO + "Checking file %s..." + Colors.END) % l.name
        result = l.check(langset)

        passed = True
        for fld in result.values():
            if fld.languages != langset:
                print ("   " + Colors.BOLD_ON + "%s" + Colors.BOLD_OFF +": %s missing!" + Colors.END) % (fld.name, str(list(langset.difference (fld.languages))))
                passed = False

        if passed:
            print Colors.OK + " PASSED" + Colors.END
        else:
            print Colors.ERROR + " FAILED" + Colors.END

if __name__ == '__main__':
    main()

Just put it somewhere and run it like that :
Code:
./check.py language/path/

In case you need more languages than "en" and "fr", just add them inside the "langset" variable (line 85).
Code:
#Language set
langset = set(['en', 'fr', 'zh', 'de'])




Theme © iAndrew 2016 - Forum software by © MyBB