[Python] domanda agli utilizzatori di pycharm.

Gollum1 gollum1.smeagol1 a gmail.com
Mar 15 Ott 2013 23:57:34 CEST


Il 15 ottobre 2013 23:32, Valerio Maggio <valerio.maggio a gmail.com> ha scritto:
>
> Gollum1 <gollum1.smeagol1 a gmail.com> wrote:
>
>> print(_("\t'%s': unknown mode.") % line_args['mode'], file=sys.stderr)
>>
>> tutte le righe che sono in questa forma mi vengono segnalate come:
>>
>> "Unresolved reference '_'
>>
>> a quanto ho capito, la funzione "_" è iniettata dal modulo gettext, a
>> runtime, quindi non esiste in realtà una definizione della stessa nel
>> codice...
>
> A dirti il vero, io personalmente non riscontro questo comportamento.
> Di solito, utilizzo l'alias di "_" per la funzione gettext_lazy di Django, alias che definisco in maniera esplicita a monte con un "from django.utils.translation import gettext_lazy as _".
>
> Non ho capito, invece, se nel tuo caso questo alias sia o meno esplicito nel codice con modalità simili alle mia.
> Tuttavia, se il problema dovesse persistere, allora potrebbe trattarsi *davvero* di una limitazione del motore di inferenza di PyCharm (nella versione 2.7, ad esempio, si aveva un errore simile con nose.tools).
> In questo caso, il workaround consigliato è quello di "sopprimere le notifiche" per quella classe di messaggi.
> Maggiori dettagli qui: http://youtrack.jetbrains.com/issue/PY-7614

in realtà il codice per la localizzazione, l'ho estrapolato
confrontando alcuni script presi in rete, con le nozioni che mi sono
state passate da un utente qui in lista parecchio tempo fa (il
progetto è stato fermo per lungo tempo, chissa che ora non stia
superando il mio "blocco dello scrittore/coder")...

Il codice in oggetto è il seguente:

import gettext

def my_gettext(s):
    # per wrappare un problema di argparse (usato nello stesso modulo)
che non mi permette di localizzare alcune stringhe
    return _(s)
gettext.gettext = my_gettext

def InitI18n(APP_NAME, locale_path=sys.path[0]) -> object: #noto ora
questo -> object, lo ha inserito pycharm.
    """Initialize th I18N stuff: load modules, set environments etc...
    @rtype : object
    """
    """Da rivedere per la gestione di diversi S.O"""
    locale_path = os.path.realpath(os.path.join(locale_path, "locale"))
    if not 'LANG' in os.environ:
        locale_path = os.path.realpath(os.path.join(locale_path, "locale"))



   #if os.path.exists(path.join(locale_path):
      #LOCALE_DIR = path.join(locale_path, 'locale' )
   #else:
      #for directory in [sys.prefix, path.join( sys.prefix, 'local' )]:
         #installed_root_dir = path.join( directory, 'share' )
         #if path.exists( path.join( installed_root_dir,
'gallery-uploader', 'stuff', 'gallery.svg' ) ):
            #LOCALE_DIR = path.join( installed_root_dir, 'locale' )
            #if not STUFF_DIR:
                #STUFF_DIR = path.join( installed_root_dir,
'gallery-uploader', 'stuff' )
            #break

    if not 'LANG' in os.environ:
        import sys
        if sys.platform == "darwin":
             # On Macintosh you have to get preferred language from OS
             import subprocess
             pp = subprocess.Popen( [ 'defaults', 'read', '-g', 'AppleLocale' ],
                   stdout = subprocess.PIPE )
             os.environ[ 'LANG' ] = pp.communicate()[ 0 ].strip()

        else:
             # On other OS get defaults
             loc, cp = locale.getdefaultlocale()
             os.environ[ 'LANG' ] = loc
             if cp:
                os.environ[ 'LANG' ] += "." + cp

    # Set the default locale for LC_CTYPE
    locale.setlocale( locale.LC_CTYPE, '' )

    # Initialize gettext engine to look for localised messages in 'locale'
    # subdirectory of current working directory
    import gettext
    gettext.install( APP_NAME, locale_path )




come si può vedere non è specificata da nessuna parte la funzione "_"
quindi pycharm ha ragione a indicarmelo come non definito, però a
runtime è inserito dal modulo gettext.install, infatti poi la funzione
viene eseguita correttamente...

scusate il codice ancora un po' sporco, ma lo sto riprendendo in mano
ora dopo lungo tempo di sonnambulismo...

Byez
-- 
Gollum1
Tesssssoro, dov'é il mio tessssoro...


Maggiori informazioni sulla lista Python