2013-09-09

Łǎ łōčǎłé zz_ZZ, ł'ǎűţŕé ƒǎçōи ďé ƒǎìŕé śōи ł33ţ



Tantôt en Anglais, tantôt en Français, je change la langue par défaut de mon terminal assez régulièrement.  Et c'est au cours d'un changement que je suis tombé sur une locale étrange "[Developer] Accented English", que j'ai bien évidemment validé. Je suis curieux.

Probablement qu'un jour ça me perdra, en attendant ça m'amuse.

Attention, ce mode rend votre terminal instable éи ρłűś ďé łé ŕéиďŕé ď샃ìčìłéɱéиţ łìśìƃłé !



        Comme vous pouvez le voir sur la vignette ci-contre, cette locale est la locale par défaut, du moins le contenu du texte, sauf que les lettres sont piochées dans les alphabets d'un peu tout le monde.


    Vous reconnaissez le i cyrillique en minuscule (и), le tréma, le circonflexe, le caron, la cédille … et encore plein d'autres cas de la diacritique latine.


    Codons !


    Je n'ai trouvé aucune explication sur cette locale dans la documentation Android, probablement que les cas concrets d'utilisation sont explicités dans les sources.

    En attendant de lui trouver un sens, faisons-en un easter-egg :  si un autre développeur utilise mon app en Accented English, autant lui être agréable et être raccord avec le reste de son terminal.

    Le code de la locale est zz_ZZ (pays région) il convient de créer "values-zz" et d'y placer le bon fichier "strings.xml", fidèle reflet de values/strings.xml !

     En attendant de mettre la main sur la table de conversion, je vous propose celle-ci :
    'a' : "ǎ", 'b' : "ƃ", 'c' : "č", 'd' : "ď", 'e' : "é",
    'f' : "ƒ", 'g' : "ǧ", 'h' : "ℏ", 'i' : "ì", 'j' : "ĵ", 'k' : "ķ", 'l' : "ł",
    'm' : "ɱ", 'n' : "и", 'o' : "ō", 'p' : "ρ", 'q' : "ʠ", 'r' : "ŕ", 's' : "ś",
    't' : "ţ", 'u' : "ű", 'v' : "ʋ", 'w' : "ŵ", 'x' : "ẍ", 'y' : "ẏ", 'z' : "ž",
    
    'A' : "Â", 'B' : "Ɓ", 'C' : "Ç", 'D' : "Ð", 'E' : "Ë", 'F' : "Ƒ", 'G' : "Ǧ",
    'H' : "Ȟ", 'I' : "Í", 'J' : "Ĵ", 'K' : "Ķ", 'L' : "Ł", 'M' : "Ḿ", 'N' : "Ň",
    'O' : "Ô", 'P' : "Ƥ", 'Q' : "Q", 'R' : "Ŕ", 'S' : "Ş", 'T' : "Ť", 'U' : "Ü",
    'V' : "℣", 'W' : "₩", 'X' : "Ẋ", 'Y' : "¥", 'Z' : "Ż"

    Le visuel est cohérent avec les choix faits pour Android.

    Même si la conversion est en fait triviale, il est possible de l'automatiser avec quelques lignes de python :
    Utilisation : ./script.py input.xml output.xml
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*- 
    
    '''
    __author__ = "Cekage"
    __copyright__ = "Copyleft 2013, Cekage Studio"
    __credits__ = ["cekage", "fileformat"]
    __license__ = "WTFPL"
    __version__ = "1"
    __maintainer__ = "cekage"
    __email__ = "android.dev@cekage.net"
    __status__ = "ƤŔÔÐÜÇŤÍÔŇ"
    
    # Ǧŕééţž ţō http://www.fileformat.info/info/unicode/category/Ll/list.htm
    # Ǧŕééţž ţō http://www.fileformat.info/info/unicode/category/Lu/list.htm
    '''
    
    import sys
    import getopt
    import os
    from xml.etree import ElementTree
    
    convert_table = { 'a' : "ǎ", 'b' : "ƃ", 'c' : "č", 'd' : "ď", 'e' : "é",
    'f' : "ƒ", 'g' : "ǧ", 'h' : "ℏ", 'i' : "ì", 'j' : "ĵ", 'k' : "ķ", 'l' : "ł",
    'm' : "ɱ", 'n' : "и", 'o' : "ō", 'p' : "ρ", 'q' : "ʠ", 'r' : "ŕ", 's' : "ś",
    't' : "ţ", 'u' : "ű", 'v' : "ʋ", 'w' : "ŵ", 'x' : "ẍ", 'y' : "ẏ", 'z' : "ž",
    
    'A' : "Â", 'B' : "Ɓ", 'C' : "Ç", 'D' : "Ð", 'E' : "Ë", 'F' : "Ƒ", 'G' : "Ǧ",
    'H' : "Ȟ", 'I' : "Í", 'J' : "Ĵ", 'K' : "Ķ", 'L' : "Ł", 'M' : "Ḿ", 'N' : "Ň",
    'O' : "Ô", 'P' : "Ƥ", 'Q' : "Q", 'R' : "Ŕ", 'S' : "Ş", 'T' : "Ť", 'U' : "Ü",
    'V' : "℣", 'W' : "₩", 'X' : "Ẋ", 'Y' : "¥", 'Z' : "Ż"}
    
    def accentualize(text):
        ''' returns text with all known chars replaced by accented one '''
        
        accentualized=""
        for char in list(text):
            if char in convert_table.keys():
                accentualized += convert_table[char]
            else:
                accentualized += char
        return accentualized
    
    def convertXML(xmlfrom,toxml):
        ''' reads xmlfrom, loads <string>, accentualizes the text and finally writes to toxml '''
        
        document = ElementTree.parse(xmlfrom)
        resroot = document.getroot()
        
        for string in resroot.findall('string'):
            string.text =  accentualize(string.text)
            
        document.write(toxml,encoding='UTF-8',xml_declaration=True)
    
    def main():
        if len(sys.argv) < 3:
            sys.exit('Üśǎǧé: %s ìиρűţ.ẍɱł ōűţρűţ.ẍɱł' % sys.argv[0])
    
        if not os.path.exists(sys.argv[1]):
           sys.exit('ËŔŔÔŔ: %s ŵǎś иōţ ƒōűиď!' % sys.argv[1])
        
        convertXML(sys.argv[1],sys.argv[2])
    
    if __name__ == "__main__":
        main()
    
    Voilà ce que ça donne :

    Quelques limites à cette locale.

    Passer à cette locale va rendre votre terminal instable le temps son utilisation, si vous avez besoin de stabilité ne l'utilisez pas en permanence.

    Voici deux briques de base du système android qui vont tôt ou tard vous poser problème :
    • Settings.apk ( l'application Parametres )
     
    • Google Search




    Enjoy :-)

    Aucun commentaire: