.. _advfeatures: Advanced features ================= Managing schema generations --------------------------- Renaming persistent classes --------------------------- PyAMS provides `zodbupdate` script to update easily update the change in ZODB. Because, when you develop new features to PyAMS we sometimes have to rename or modify classes of already stored objects and if you do that you will never access yours objects. To rename classes of existing objects: **1) Include you package in the require resource for you webapp** .. code-block:: python requires = [ 'mypackage', ... ] **2) Add the Entry points** In the `setup.py` file add 'zodbupdate' params into entry_points where is store zodbupdate directives .. code-block:: python entry_points={ 'zodbupdate': [ 'renames = mypackage.generations:RENAMED_CLASSES' ] } **3) Create a module named** ``generation`` **with the migration directives** .. code-block:: python RENAMED_CLASSES = { 'mypackage.mymodule MyOldClass': 'mypackage.mymodule MyNewClass' } **4) Run the commands** ``buildout`` . .. code-block:: console $ mypackage/bin/buildout $ webapp/bin/buildout The ``buildout`` command going to install correctly the package and add the new entry_points references in entry_points.txt **5) Run the commands** ``zodbupdate`` To finish run `zodbupdate` to apply the changes describe in `RENAMED_CLASSES` .. code-block:: console $ bin/zodbupdate --config etc/zodbupdate-zeo.conf Where `zodbupdate-zeo.conf` is the configuration file to access to the ZODB. Including SQLAlchemy -------------------- Using GIS features ------------------ .. _howto-i18n: Internationalization -------------------- Internationalization is the process of developing your plugin so it can easily be translated into other languages It's called also i18n (because there are 18 letters between the i and the n) Introduction to Gettext ^^^^^^^^^^^^^^^^^^^^^^^ For i18n **gettext** libraries and tools is widely used in the open-source world. Here is how it works in a few sentences: Developers wrap translatable strings in special gettext functions Special tools parse the source code files and extract the translatable strings into POT (Portable Objects Template) files. Translators translate the strings and the result is a PO file (POT file, but with translations inside) PO files are compiled to binary MO files, which give faster access to the strings at run-time In source code the _() function which refers to the native gettext-compliant translation function. PyAMS help us to generated this translation file with the tool *pot-create*: .. code-block:: shell pot-create -o ref.pot Example to update PyAMS package: .. code-block:: shell #bin/pot-create -o src//locales/.pot src/ #msgmerge -U --previous --sort-by-file src//locales/fr/LC_MESSAGES/ref.po src//locales/ref.pot #msgfmt src//locales/fr/LC_MESSAGES/ref.po -o src//locales/fr/LC_MESSAGES/ref.mo