Internationalization is built into Web2py from the ground up.
Wrap all of your strings used in templates, controllers, models and menus with the T() function.
The Model:
The Controller:
Now that all of the strings have been wrapped in the T() function, you can generate all of the strings in the internationalization tool by clicking on "update all language".
Web2py organizes all of the string that have been wrapped in the T() function in a single place where you can provide a translation in the target language. In the example below, I have selected es.py and translated two of the strings.
Web2py looks at the default language in the browser settings.
Below is the language output of the manage_aliases grid in Spanish.