[MERGE]TRUNK.
bzr revid: vme@tinyerp.com-20121207131444-qscwkjtqua3nqt9q bzr revid: vme@tinyerp.com-20121210052056-p0cnnaam9j8l4usv
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import http
|
||||
import controllers
|
||||
import cli
|
||||
|
||||
wsgi_postload = http.wsgi_postload
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
import test_js
|
||||
@@ -0,0 +1,35 @@
|
||||
import logging
|
||||
import optparse
|
||||
import sys
|
||||
|
||||
import unittest2
|
||||
|
||||
import openerp
|
||||
import openerp.addons.web.tests
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
class TestJs(openerp.cli.Command):
|
||||
def run(self, args):
|
||||
self.parser = parser = optparse.OptionParser()
|
||||
parser.add_option("-d", "--database", dest="db_name", default=False, help="specify the database name")
|
||||
parser.add_option("--xmlrpc-port", dest="xmlrpc_port", default=8069, help="specify the TCP port for the XML-RPC protocol", type="int")
|
||||
# proably need to add both --superadmin-password and --database-admin-password
|
||||
self.parser.parse_args(args)
|
||||
|
||||
# test ony uses db_name xmlrpc_port admin_passwd, so use the server one for the actual parsing
|
||||
|
||||
config = openerp.tools.config
|
||||
config.parse_config(args)
|
||||
# needed until runbot is fixed
|
||||
config['db_password'] = config['admin_passwd']
|
||||
|
||||
# run js tests
|
||||
openerp.netsvc.init_alternative_logger()
|
||||
suite = unittest2.TestSuite()
|
||||
suite.addTests(unittest2.TestLoader().loadTestsFromModule(openerp.addons.web.tests.test_js))
|
||||
r = unittest2.TextTestRunner(verbosity=2).run(suite)
|
||||
if r.errors or r.failures:
|
||||
sys.exit(1)
|
||||
|
||||
# vim:et:ts=4:sw=4:
|
||||
@@ -1121,41 +1121,6 @@ class DataSet(openerpweb.Controller):
|
||||
class View(openerpweb.Controller):
|
||||
_cp_path = "/web/view"
|
||||
|
||||
def fields_view_get(self, req, model, view_id, view_type,
|
||||
transform=True, toolbar=False, submenu=False):
|
||||
Model = req.session.model(model)
|
||||
fvg = Model.fields_view_get(view_id, view_type, req.context, toolbar, submenu)
|
||||
# todo fme?: check that we should pass the evaluated context here
|
||||
self.process_view(req.session, fvg, req.context, transform, (view_type == 'kanban'))
|
||||
return fvg
|
||||
|
||||
def process_view(self, session, fvg, context, transform, preserve_whitespaces=False):
|
||||
# depending on how it feels, xmlrpclib.ServerProxy can translate
|
||||
# XML-RPC strings to ``str`` or ``unicode``. ElementTree does not
|
||||
# enjoy unicode strings which can not be trivially converted to
|
||||
# strings, and it blows up during parsing.
|
||||
|
||||
# So ensure we fix this retardation by converting view xml back to
|
||||
# bit strings.
|
||||
if isinstance(fvg['arch'], unicode):
|
||||
arch = fvg['arch'].encode('utf-8')
|
||||
else:
|
||||
arch = fvg['arch']
|
||||
fvg['arch_string'] = arch
|
||||
|
||||
fvg['arch'] = xml2json_from_elementtree(
|
||||
ElementTree.fromstring(arch), preserve_whitespaces)
|
||||
|
||||
if 'id' in fvg['fields']:
|
||||
# Special case for id's
|
||||
id_field = fvg['fields']['id']
|
||||
id_field['original_type'] = id_field['type']
|
||||
id_field['type'] = 'id'
|
||||
|
||||
for field in fvg['fields'].itervalues():
|
||||
for view in field.get("views", {}).itervalues():
|
||||
self.process_view(session, view, None, transform)
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def add_custom(self, req, view_id, arch):
|
||||
CustomView = req.session.model('ir.ui.view.custom')
|
||||
@@ -1179,10 +1144,6 @@ class View(openerpweb.Controller):
|
||||
return {'result': True}
|
||||
return {'result': False}
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def load(self, req, model, view_id, view_type, toolbar=False):
|
||||
return self.fields_view_get(req, model, view_id, view_type, toolbar=toolbar)
|
||||
|
||||
class TreeView(View):
|
||||
_cp_path = "/web/treeview"
|
||||
|
||||
|
||||
@@ -12,17 +12,18 @@ Contents:
|
||||
:maxdepth: 1
|
||||
|
||||
module
|
||||
testing
|
||||
|
||||
widget
|
||||
|
||||
async
|
||||
rpc
|
||||
qweb
|
||||
client_action
|
||||
form_view
|
||||
|
||||
testing
|
||||
|
||||
search_view
|
||||
list_view
|
||||
form_view
|
||||
|
||||
changelog-7.0
|
||||
|
||||
|
||||
@@ -0,0 +1,281 @@
|
||||
Building an OpenERP Web module
|
||||
==============================
|
||||
|
||||
There is no significant distinction between an OpenERP Web module and
|
||||
an OpenERP module, the web part is mostly additional data and code
|
||||
inside a regular OpenERP module. This allows providing more seamless
|
||||
features by integrating your module deeper into the web client.
|
||||
|
||||
A Basic Module
|
||||
--------------
|
||||
|
||||
A very basic OpenERP module structure will be our starting point:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
web_example
|
||||
├── __init__.py
|
||||
└── __openerp__.py
|
||||
|
||||
.. literalinclude:: module/__openerp__.py
|
||||
:language: python
|
||||
|
||||
This is a sufficient minimal declaration of a valid OpenERP module.
|
||||
|
||||
Web Declaration
|
||||
---------------
|
||||
|
||||
There is no such thing as a "web module" declaration. An OpenERP
|
||||
module is automatically recognized as "web-enabled" if it contains a
|
||||
``static`` directory at its root, so:
|
||||
|
||||
.. code-block:: text
|
||||
|
||||
web_example
|
||||
├── __init__.py
|
||||
├── __openerp__.py
|
||||
└── static
|
||||
|
||||
is the extent of it. You should also change the dependency to list
|
||||
``web``:
|
||||
|
||||
.. literalinclude:: module/__openerp__.py.1.diff
|
||||
:language: diff
|
||||
|
||||
.. note::
|
||||
|
||||
This does not matter in normal operation so you may not realize
|
||||
it's wrong (the web module does the loading of everything else, so
|
||||
it can only be loaded), but when e.g. testing the loading process
|
||||
is slightly different than normal, and incorrect dependency may
|
||||
lead to broken code.
|
||||
|
||||
This makes the "web" discovery system consider the module as having a
|
||||
"web part", and check if it has web controllers to mount or javascript
|
||||
files to load. The content of the ``static/`` folder is also
|
||||
automatically made available to web browser at the URL
|
||||
``$module-name/static/$file-path``. This is sufficient to provide
|
||||
pictures (of cats, usually) through your module. However there are
|
||||
still a few more steps to running javascript code.
|
||||
|
||||
Getting Things Done
|
||||
-------------------
|
||||
|
||||
The first one is to add javascript code. It's customary to put it in
|
||||
``static/src/js``, to have room for e.g. other file types, or
|
||||
third-party libraries.
|
||||
|
||||
.. literalinclude:: module/static/src/js/first_module.js
|
||||
:language: javascript
|
||||
|
||||
The client won't load any file unless specified, thus the new file
|
||||
should be listed in the module's manifest file, under a new key ``js``
|
||||
(a list of file names, or glob patterns):
|
||||
|
||||
.. literalinclude:: module/__openerp__.py.2.diff
|
||||
:language: diff
|
||||
|
||||
At this point, if the module is installed and the client reloaded the
|
||||
message should appear in your browser's development console.
|
||||
|
||||
.. note::
|
||||
|
||||
Because the manifest file has been edited, you will have to
|
||||
restart the OpenERP server itself for it to be taken in account.
|
||||
|
||||
You may also want to open your browser's console *before*
|
||||
reloading, depending on the browser messages printed while the
|
||||
console is closed may not work or may not appear after opening it.
|
||||
|
||||
.. note::
|
||||
|
||||
If the message does not appear, try cleaning your browser's caches
|
||||
and ensure the file is correctly loaded from the server logs or
|
||||
the "resources" tab of your browser's developers tools.
|
||||
|
||||
At this point the code runs, but it runs only once when the module is
|
||||
initialized, and it can't get access to the various APIs of the web
|
||||
client (such as making RPC requests to the server). This is done by
|
||||
providing a `javascript module`_:
|
||||
|
||||
.. literalinclude:: module/static/src/js/first_module.js.1.diff
|
||||
:language: diff
|
||||
|
||||
If you reload the client, you'll see a message in the console exactly
|
||||
as previously. The differences, though invisible at this point, are:
|
||||
|
||||
* All javascript files specified in the manifest (only this one so
|
||||
far) have been fully loaded
|
||||
* An instance of the web client and a namespace inside that instance
|
||||
(with the same name as the module) have been created and are
|
||||
available for use
|
||||
|
||||
The latter point is what the ``instance`` parameter to the function
|
||||
provides: an instance of the OpenERP Web client, with the contents of
|
||||
all the new module's dependencies loaded in and initialized. These are
|
||||
the entry points to the web client's APIs.
|
||||
|
||||
To demonstrate, let's build a simple :doc:`client action
|
||||
<client_action>`: a stopwatch
|
||||
|
||||
First, the action declaration:
|
||||
|
||||
.. literalinclude:: module/__openerp__.py.3.diff
|
||||
:language: diff
|
||||
|
||||
.. literalinclude:: module/web_example.xml
|
||||
:language: xml
|
||||
|
||||
then set up the :doc:`client action hook <client_action>` to register
|
||||
a function (for now):
|
||||
|
||||
.. literalinclude:: module/static/src/js/first_module.js.2.diff
|
||||
:language: diff
|
||||
|
||||
Updating the module (in order to load the XML description) and
|
||||
re-starting the server should display a new menu *Example Client
|
||||
Action* at the top-level. Opening said menu will make the message
|
||||
appear, as usual, in the browser's console.
|
||||
|
||||
Paint it black
|
||||
--------------
|
||||
|
||||
The next step is to take control of the page itself, rather than just
|
||||
print little messages in the console. This we can do by replacing our
|
||||
client action function by a :doc:`widget`. Our widget will simply use
|
||||
its :js:func:`~openerp.web.Widget.start` to add some content to its
|
||||
DOM:
|
||||
|
||||
.. literalinclude:: module/static/src/js/first_module.js.3.diff
|
||||
:language: diff
|
||||
|
||||
after reloading the client (to update the javascript file), instead of
|
||||
printing to the console the menu item clears the whole screen and
|
||||
displays the specified message in the page.
|
||||
|
||||
Since we've added a class on the widget's :ref:`DOM root
|
||||
<widget-dom_root>` we can now see how to add a stylesheet to a module:
|
||||
first create the stylesheet file:
|
||||
|
||||
.. literalinclude:: module/static/src/css/web_example.css
|
||||
:language: css
|
||||
|
||||
then add a reference to the stylesheet in the module's manifest (which
|
||||
will require restarting the OpenERP Server to see the changes, as
|
||||
usual):
|
||||
|
||||
.. literalinclude:: module/__openerp__.py.4.diff
|
||||
:language: diff
|
||||
|
||||
the text displayed by the menu item should now be huge, and
|
||||
white-on-black (instead of small and black-on-white). From there on,
|
||||
the world's your canvas.
|
||||
|
||||
.. note::
|
||||
|
||||
Prefixing CSS rules with both ``.openerp`` (to ensure the rule
|
||||
will apply only within the confines of the OpenERP Web client) and
|
||||
a class at the root of your own hierarchy of widgets is strongly
|
||||
recommended to avoid "leaking" styles in case the code is running
|
||||
embedded in an other web page, and does not have the whole screen
|
||||
to itself.
|
||||
|
||||
So far we haven't built much (any, really) DOM content. It could all
|
||||
be done in :js:func:`~openerp.web.Widget.start` but that gets unwieldy
|
||||
and hard to maintain fast. It is also very difficult to extend by
|
||||
third parties (trying to add or change things in your widgets) unless
|
||||
broken up into multiple methods which each perform a little bit of the
|
||||
rendering.
|
||||
|
||||
The first way to handle this method is to delegate the content to
|
||||
plenty of sub-widgets, which can be individually overridden. An other
|
||||
method [#DOM-building]_ is to use `a template
|
||||
<http://en.wikipedia.org/wiki/Web_template>`_ to render a widget's
|
||||
DOM.
|
||||
|
||||
OpenERP Web's template language is :doc:`qweb`. Although any
|
||||
templating engine can be used (e.g. `mustache
|
||||
<http://mustache.github.com/>`_ or `_.template
|
||||
<http://underscorejs.org/#template>`_) QWeb has important features
|
||||
which other template engines may not provide, and has special
|
||||
integration to OpenERP Web widgets.
|
||||
|
||||
Adding a template file is similar to adding a style sheet:
|
||||
|
||||
.. literalinclude:: module/static/src/xml/web_example.xml
|
||||
:language: xml
|
||||
|
||||
.. literalinclude:: module/__openerp__.py.5.diff
|
||||
:language: diff
|
||||
|
||||
The template can then easily be hooked in the widget:
|
||||
|
||||
.. literalinclude:: module/static/src/js/first_module.js.4.diff
|
||||
:language: diff
|
||||
|
||||
And finally the CSS can be altered to style the new (and more complex)
|
||||
template-generated DOM, rather than the code-generated one:
|
||||
|
||||
.. literalinclude:: module/static/src/css/web_example.css.1.diff
|
||||
:language: diff
|
||||
|
||||
.. note::
|
||||
|
||||
The last section of the CSS change is an example of "state
|
||||
classes": a CSS class (or set of classes) on the root of the
|
||||
widget, which is toggled when the state of the widget changes and
|
||||
can perform drastic alterations in rendering (usually
|
||||
showing/hiding various elements).
|
||||
|
||||
This pattern is both fairly simple (to read and understand) and
|
||||
efficient (because most of the hard work is pushed to the
|
||||
browser's CSS engine, which is usually highly optimized, and done
|
||||
in a single repaint after toggling the class).
|
||||
|
||||
The last step (until the next one) is to add some behavior and make
|
||||
our stopwatch watch. First hook some events on the buttons to toggle
|
||||
the widget's state:
|
||||
|
||||
.. literalinclude:: module/static/src/js/first_module.js.5.diff
|
||||
:language: diff
|
||||
|
||||
This demonstrates the use of the "events hash" and event delegation to
|
||||
declaratively handle events on the widget's DOM. And already changes
|
||||
the button displayed in the UI. Then comes some actual logic:
|
||||
|
||||
.. literalinclude:: module/static/src/js/first_module.js.6.diff
|
||||
:language: diff
|
||||
|
||||
* An initializer (the ``init`` method) is introduced to set-up a few
|
||||
internal variables: ``_start`` will hold the start of the timer (as
|
||||
a javascript Date object), and ``_watch`` will hold a ticker to
|
||||
update the interface regularly and display the "current time".
|
||||
|
||||
* ``update_counter`` is in charge of taking the time difference
|
||||
between "now" and ``_start``, formatting as ``HH:MM:SS`` and
|
||||
displaying the result on screen.
|
||||
|
||||
* ``watch_start`` is augmented to initialize ``_start`` with its value
|
||||
and set-up the update of the counter display every 33ms.
|
||||
|
||||
* ``watch_stop`` disables the updater, does a final update of the
|
||||
counter display and resets everything.
|
||||
|
||||
* Finally, because javascript Interval and Timeout objects execute
|
||||
"outside" the widget, they will keep going even after the widget has
|
||||
been destroyed (especially an issue with intervals as they repeat
|
||||
indefinitely). So ``_watch`` *must* be cleared when the widget is
|
||||
destroyed (then the ``_super`` must be called as well in order to
|
||||
perform the "normal" widget cleanup).
|
||||
|
||||
Starting and stopping the watch now works, and correctly tracks time
|
||||
since having started the watch, neatly formatted.
|
||||
|
||||
.. [#DOM-building] they are not alternative solutions: they work very
|
||||
well together. Templates are used to build "just
|
||||
DOM", sub-widgets are used to build DOM subsections
|
||||
*and* delegate part of the behavior (e.g. events
|
||||
handling).
|
||||
|
||||
.. _javascript module:
|
||||
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript
|
||||
@@ -0,0 +1,7 @@
|
||||
# __openerp__.py
|
||||
{
|
||||
'name': "Web Example",
|
||||
'description': "Basic example of a (future) web module",
|
||||
'category': 'Hidden',
|
||||
'depends': ['base'],
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
--- web_example/__openerp__.py
|
||||
+++ web_example/__openerp__.py
|
||||
@@ -1,7 +1,7 @@
|
||||
# __openerp__.py
|
||||
{
|
||||
'name': "Web Example",
|
||||
'description': "Basic example of a (future) web module",
|
||||
'category': 'Hidden',
|
||||
- 'depends': ['base'],
|
||||
+ 'depends': ['web'],
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
--- web_example/__openerp__.py
|
||||
+++ web_example/__openerp__.py
|
||||
@@ -1,7 +1,8 @@
|
||||
# __openerp__.py
|
||||
{
|
||||
'name': "Web Example",
|
||||
'description': "Basic example of a (future) web module",
|
||||
'category': 'Hidden',
|
||||
'depends': ['web'],
|
||||
+ 'js': ['static/src/js/first_module.js'],
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
--- web_example/__openerp__.py
|
||||
+++ web_example/__openerp__.py
|
||||
@@ -1,8 +1,9 @@
|
||||
# __openerp__.py
|
||||
{
|
||||
'name': "Web Example",
|
||||
'description': "Basic example of a (future) web module",
|
||||
'category': 'Hidden',
|
||||
'depends': ['web'],
|
||||
+ 'data': ['web_example.xml'],
|
||||
'js': ['static/src/js/first_module.js'],
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
--- web_example/__openerp__.py
|
||||
+++ web_example/__openerp__.py
|
||||
@@ -1,9 +1,10 @@
|
||||
# __openerp__.py
|
||||
{
|
||||
'name': "Web Example",
|
||||
'description': "Basic example of a (future) web module",
|
||||
'category': 'Hidden',
|
||||
'depends': ['web'],
|
||||
'data': ['web_example.xml'],
|
||||
'js': ['static/src/js/first_module.js'],
|
||||
+ 'css': ['static/src/css/web_example.css'],
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
--- web_example/__openerp__.py
|
||||
+++ web_example/__openerp__.py
|
||||
@@ -1,10 +1,11 @@
|
||||
# __openerp__.py
|
||||
{
|
||||
'name': "Web Example",
|
||||
'description': "Basic example of a (future) web module",
|
||||
'category': 'Hidden',
|
||||
'depends': ['web'],
|
||||
'data': ['web_example.xml'],
|
||||
'js': ['static/src/js/first_module.js'],
|
||||
'css': ['static/src/css/web_example.css'],
|
||||
+ 'qweb': ['static/src/xml/web_example.xml'],
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
.openerp .oe_web_example {
|
||||
color: white;
|
||||
background-color: black;
|
||||
height: 100%;
|
||||
font-size: 400%;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
--- web_example/static/src/css/web_example.css
|
||||
+++ web_example/static/src/css/web_example.css
|
||||
@@ -1,6 +1,13 @@
|
||||
.openerp .oe_web_example {
|
||||
color: white;
|
||||
background-color: black;
|
||||
height: 100%;
|
||||
- font-size: 400%;
|
||||
}
|
||||
+.openerp .oe_web_example h4 {
|
||||
+ margin: 0;
|
||||
+ font-size: 200%;
|
||||
+}
|
||||
+.openerp .oe_web_example.oe_web_example_started .oe_web_example_start button,
|
||||
+.openerp .oe_web_example.oe_web_example_stopped .oe_web_example_stop button {
|
||||
+ display: none
|
||||
+}
|
||||
@@ -0,0 +1,2 @@
|
||||
// static/src/js/first_module.js
|
||||
console.log("Debug statement: file loaded");
|
||||
@@ -0,0 +1,8 @@
|
||||
--- web_example/static/src/js/first_module.js
|
||||
+++ web_example/static/src/js/first_module.js
|
||||
@@ -1,2 +1,4 @@
|
||||
// static/src/js/first_module.js
|
||||
-console.log("Debug statement: file loaded");
|
||||
+openerp.web_example = function (instance) {
|
||||
+ console.log("Module loaded");
|
||||
+};
|
||||
@@ -0,0 +1,11 @@
|
||||
--- web_example/static/src/js/first_module.js
|
||||
+++ web_example/static/src/js/first_module.js
|
||||
@@ -1,4 +1,7 @@
|
||||
// static/src/js/first_module.js
|
||||
openerp.web_example = function (instance) {
|
||||
- console.log("Module loaded");
|
||||
+ instance.web.client_actions.add('example.action', 'instance.web_example.action');
|
||||
+ instance.web_example.action = function (parent, action) {
|
||||
+ console.log("Executed the action", action);
|
||||
+ };
|
||||
};
|
||||
@@ -0,0 +1,18 @@
|
||||
--- web_example/static/src/js/first_module.js
|
||||
+++ web_example/static/src/js/first_module.js
|
||||
@@ -1,7 +1,11 @@
|
||||
// static/src/js/first_module.js
|
||||
openerp.web_example = function (instance) {
|
||||
- instance.web.client_actions.add('example.action', 'instance.web_example.action');
|
||||
- instance.web_example.action = function (parent, action) {
|
||||
- console.log("Executed the action", action);
|
||||
- };
|
||||
+ instance.web.client_actions.add('example.action', 'instance.web_example.Action');
|
||||
+ instance.web_example.Action = instance.web.Widget.extend({
|
||||
+ className: 'oe_web_example',
|
||||
+ start: function () {
|
||||
+ this.$el.text("Hello, world!");
|
||||
+ return this._super();
|
||||
+ }
|
||||
+ });
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
--- web_example/static/src/js/first_module.js
|
||||
+++ web_example/static/src/js/first_module.js
|
||||
@@ -1,11 +1,7 @@
|
||||
// static/src/js/first_module.js
|
||||
openerp.web_example = function (instance) {
|
||||
instance.web.client_actions.add('example.action', 'instance.web_example.Action');
|
||||
instance.web_example.Action = instance.web.Widget.extend({
|
||||
+ template: 'web_example.action'
|
||||
- className: 'oe_web_example',
|
||||
- start: function () {
|
||||
- this.$el.text("Hello, world!");
|
||||
- return this._super();
|
||||
- }
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,23 @@
|
||||
--- web_example/static/src/js/first_module.js
|
||||
+++ web_example/static/src/js/first_module.js
|
||||
@@ -1,7 +1,19 @@
|
||||
// static/src/js/first_module.js
|
||||
openerp.web_example = function (instance) {
|
||||
instance.web.client_actions.add('example.action', 'instance.web_example.Action');
|
||||
instance.web_example.Action = instance.web.Widget.extend({
|
||||
- template: 'web_example.action'
|
||||
+ template: 'web_example.action',
|
||||
+ events: {
|
||||
+ 'click .oe_web_example_start button': 'watch_start',
|
||||
+ 'click .oe_web_example_stop button': 'watch_stop'
|
||||
+ },
|
||||
+ watch_start: function () {
|
||||
+ this.$el.addClass('oe_web_example_started')
|
||||
+ .removeClass('oe_web_example_stopped');
|
||||
+ },
|
||||
+ watch_stop: function () {
|
||||
+ this.$el.removeClass('oe_web_example_started')
|
||||
+ .addClass('oe_web_example_stopped');
|
||||
+ },
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,55 @@
|
||||
--- web_example/static/src/js/first_module.js
|
||||
+++ web_example/static/src/js/first_module.js
|
||||
@@ -1,19 +1,52 @@
|
||||
// static/src/js/first_module.js
|
||||
openerp.web_example = function (instance) {
|
||||
instance.web.client_actions.add('example.action', 'instance.web_example.Action');
|
||||
instance.web_example.Action = instance.web.Widget.extend({
|
||||
template: 'web_example.action',
|
||||
events: {
|
||||
'click .oe_web_example_start button': 'watch_start',
|
||||
'click .oe_web_example_stop button': 'watch_stop'
|
||||
},
|
||||
+ init: function () {
|
||||
+ this._super.apply(this, arguments);
|
||||
+ this._start = null;
|
||||
+ this._watch = null;
|
||||
+ },
|
||||
+ update_counter: function () {
|
||||
+ var h, m, s;
|
||||
+ // Subtracting javascript dates returns the difference in milliseconds
|
||||
+ var diff = new Date() - this._start;
|
||||
+ s = diff / 1000;
|
||||
+ m = Math.floor(s / 60);
|
||||
+ s -= 60*m;
|
||||
+ h = Math.floor(m / 60);
|
||||
+ m -= 60*h;
|
||||
+ this.$('.oe_web_example_timer').text(
|
||||
+ _.str.sprintf("%02d:%02d:%02d", h, m, s));
|
||||
+ },
|
||||
watch_start: function () {
|
||||
this.$el.addClass('oe_web_example_started')
|
||||
.removeClass('oe_web_example_stopped');
|
||||
+ this._start = new Date();
|
||||
+ // Update the UI to the current time
|
||||
+ this.update_counter();
|
||||
+ // Update the counter at 30 FPS (33ms/frame)
|
||||
+ this._watch = setInterval(
|
||||
+ this.proxy('update_counter'),
|
||||
+ 33);
|
||||
},
|
||||
watch_stop: function () {
|
||||
+ clearInterval(this._watch);
|
||||
+ this.update_counter();
|
||||
+ this._start = this._watch = null;
|
||||
this.$el.removeClass('oe_web_example_started')
|
||||
.addClass('oe_web_example_stopped');
|
||||
},
|
||||
+ destroy: function () {
|
||||
+ if (this._watch) {
|
||||
+ clearInterval(this._watch);
|
||||
+ }
|
||||
+ this._super();
|
||||
+ }
|
||||
});
|
||||
};
|
||||
@@ -0,0 +1,11 @@
|
||||
<templates>
|
||||
<div t-name="web_example.action" class="oe_web_example oe_web_example_stopped">
|
||||
<h4 class="oe_web_example_timer">00:00:00</h4>
|
||||
<p class="oe_web_example_start">
|
||||
<button type="button">Start</button>
|
||||
</p>
|
||||
<p class="oe_web_example_stop">
|
||||
<button type="button">Stop</button>
|
||||
</p>
|
||||
</div>
|
||||
</templates>
|
||||
@@ -0,0 +1,11 @@
|
||||
<!-- web_example/web_example.xml -->
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.actions.client" id="action_client_example">
|
||||
<field name="name">Example Client Action</field>
|
||||
<field name="tag">example.action</field>
|
||||
</record>
|
||||
<menuitem action="action_client_example"
|
||||
id="menu_client_example"/>
|
||||
</data>
|
||||
</openerp>
|
||||
+527
-60
@@ -1,79 +1,546 @@
|
||||
|
||||
QWeb
|
||||
====
|
||||
|
||||
QWeb is the template engine used by the OpenERP Web Client. It is a home made engine create by OpenERP developers. There are a few things to note about it:
|
||||
QWeb is the template engine used by the OpenERP Web Client. It is an
|
||||
XML-based templating language, similar to `Genshi
|
||||
<http://en.wikipedia.org/wiki/Genshi_(templating_language)>`_,
|
||||
`Thymeleaf <http://en.wikipedia.org/wiki/Thymeleaf>`_ or `Facelets
|
||||
<http://en.wikipedia.org/wiki/Facelets>`_ with a few peculiarities:
|
||||
|
||||
* Template are rendered in javascript on the client-side, the server does nothing.
|
||||
* It is an xml template engine, like Facelets_ for example. The source file must be a valid xml.
|
||||
* Templates are not interpreted. There are compiled to javascript. This makes them a lot faster to render, but sometimes harder to debug.
|
||||
* Most of the time it is used through the Widget class, but you can also use it directly using *openerp.web.qweb.render()* .
|
||||
* It's implemented fully in javascript and rendered in the browser.
|
||||
* Each template file (XML files) contains multiple templates, where
|
||||
template engine usually have a 1:1 mapping between template files
|
||||
and templates.
|
||||
* It has special support in OpenERP Web's
|
||||
:class:`~instance.web.Widget`, though it can be used outside of
|
||||
OpenERP Web (and it's possible to use :class:`~instance.web.Widget`
|
||||
without relying on the QWeb integration).
|
||||
|
||||
.. _Facelets: http://en.wikipedia.org/wiki/Facelets
|
||||
The rationale behind using QWeb instead of a more popular template syntax is
|
||||
that its extension mechanism is very similar to the openerp view inheritance
|
||||
mechanism. Like openerp views a QWeb template is an xml tree and therefore
|
||||
xpath or dom manipulations are easy to performs on it.
|
||||
|
||||
Here is a typical QWeb file:
|
||||
Here's an example demonstrating most of the basic QWeb features:
|
||||
|
||||
::
|
||||
.. code-block:: xml
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<templates>
|
||||
<t t-name="Template1">
|
||||
<div>...</div>
|
||||
</t>
|
||||
<t t-name="Template2">
|
||||
<div>...</div>
|
||||
</t>
|
||||
<div t-name="example_template" t-attf-class="base #{cls}">
|
||||
<h4 t-if="title"><t t-esc="title"/></h4>
|
||||
<ul>
|
||||
<li t-foreach="items" t-as="item" t-att-class="item_parity">
|
||||
<t t-call="example_template.sub">
|
||||
<t t-set="arg" t-value="item_value"/>
|
||||
</t>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<t t-name="example_template.sub">
|
||||
<t t-esc="arg.name"/>
|
||||
<dl>
|
||||
<t t-foreach="arg.tags" t-as="tag" t-if="tag_index lt 5">
|
||||
<dt><t t-esc="tag"/></dt>
|
||||
<dd><t t-esc="tag_value"/></dd>
|
||||
</t>
|
||||
</dl>
|
||||
</t>
|
||||
</templates>
|
||||
|
||||
A QWeb file contains multiple templates, they are simply identified by a name.
|
||||
rendered with the following context:
|
||||
|
||||
Here is a sample QWeb template:
|
||||
.. code-block:: json
|
||||
|
||||
::
|
||||
{
|
||||
"class1": "foo",
|
||||
"title": "Random Title",
|
||||
"items": [
|
||||
{ "name": "foo", "tags": {"bar": "baz", "qux": "quux"} },
|
||||
{ "name": "Lorem", "tags": {
|
||||
"ipsum": "dolor",
|
||||
"sit": "amet",
|
||||
"consectetur": "adipiscing",
|
||||
"elit": "Sed",
|
||||
"hendrerit": "ullamcorper",
|
||||
"ante": "id",
|
||||
"vestibulum": "Lorem",
|
||||
"ipsum": "dolor",
|
||||
"sit": "amet"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
<t t-name="UserPage">
|
||||
<div>
|
||||
<p>Name: <t t-esc="widget.user_name"/></p>
|
||||
<p>Password: <input type="text" t-att-value="widget.password"/></p>
|
||||
<p t-if="widget.is_admin">This user is an Administrator</p>
|
||||
<t t-foreach="widget.roles" t-as="role">
|
||||
<p>User has role: <t t-esc="role"/></p>
|
||||
</t>
|
||||
</div>
|
||||
</t>
|
||||
will yield this section of HTML document (reformated for readability):
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
*widget* is a variable given to the template engine by Widget sub-classes when they decide to render their associated template, it is simply *this*. Here is the corresponding Widget sub-class:
|
||||
|
||||
::
|
||||
|
||||
UserPageWidget = openerp.base.Widget.extend({
|
||||
template: "UserPage",
|
||||
init: function(parent) {
|
||||
this._super(parent);
|
||||
this.user_name = "Xavier";
|
||||
this.password = "lilo";
|
||||
this.is_admin = true;
|
||||
this.roles = ["Web Developer", "IE Hater", "Steve Jobs Worshiper"];
|
||||
},
|
||||
});
|
||||
|
||||
It could output something like this:
|
||||
|
||||
::
|
||||
|
||||
<div>
|
||||
<p>Name: Xavier</p>
|
||||
<p>Password: <input type="text" value="lilo"/></p>
|
||||
<p>This user is an Administrator</p
|
||||
<p>User has role: Web Developer</p>
|
||||
<p>User has role: IE Hater</p>
|
||||
<p>User has role: Steve Jobs Worshiper</p>
|
||||
<div class="base foo">
|
||||
<h4>Random Title</h4>
|
||||
<ul>
|
||||
<li class="even">
|
||||
foo
|
||||
<dl>
|
||||
<dt>bar</dt>
|
||||
<dd>baz</dd>
|
||||
<dt>qux</dt>
|
||||
<dd>quux</dd>
|
||||
</dl>
|
||||
</li>
|
||||
<li class="odd">
|
||||
Lorem
|
||||
<dl>
|
||||
<dt>ipsum</dt>
|
||||
<dd>dolor</dd>
|
||||
<dt>sit</dt>
|
||||
<dd>amet</dd>
|
||||
<dt>consectetur</dt>
|
||||
<dd>adipiscing</dd>
|
||||
<dt>elit</dt>
|
||||
<dd>Sed</dd>
|
||||
<dt>hendrerit</dt>
|
||||
<dd>ullamcorper</dd>
|
||||
</dl>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
A QWeb template should always contain one unique root element to be used effectively with the Widget class, here it is a *<div>*. QWeb only react to *<t>* elements or attributes prefixed by *t-*. The *<t>* is simply a null element, it is only used when you need to use a *t-* attribute without outputting an html element at the same time. Here are the effects of the most common QWeb attributes:
|
||||
API
|
||||
---
|
||||
|
||||
* *t-esc* outputs the result of the evaluation of the given javascript expression
|
||||
* *t-att-ATTR* sets the value of the *ATTR* attribute to the result of the evaluation of the given javascript expression
|
||||
* *t-if* outputs the element and its content only if the given javascript expression returns true
|
||||
* *t-foreach* outputs as many times as contained in the list returned by the given javascript expression. For each iteration, a variable with the name defined by *t-as* contains the current element in the list.
|
||||
While QWeb implements a number of attributes and methods for
|
||||
customization and configuration, only two things are really important
|
||||
to the user:
|
||||
|
||||
.. js:class:: QWeb2.Engine
|
||||
|
||||
The QWeb "renderer", handles most of QWeb's logic (loading,
|
||||
parsing, compiling and rendering templates).
|
||||
|
||||
OpenERP Web instantiates one for the user, and sets it to
|
||||
``instance.web.qweb``. It also loads all the template files of the
|
||||
various modules into that QWeb instance.
|
||||
|
||||
A :js:class:`QWeb2.Engine` also serves as a "template namespace".
|
||||
|
||||
.. js:function:: QWeb2.Engine.render(template[, context])
|
||||
|
||||
Renders a previously loaded template to a String, using
|
||||
``context`` (if provided) to find the variables accessed
|
||||
during template rendering (e.g. strings to display).
|
||||
|
||||
:param String template: the name of the template to render
|
||||
:param Object context: the basic namespace to use for template
|
||||
rendering
|
||||
:returns: String
|
||||
|
||||
The engine exposes an other method which may be useful in some
|
||||
cases (e.g. if you need a separate template namespace with, in
|
||||
OpenERP Web, Kanban views get their own :js:class:`QWeb2.Engine`
|
||||
instance so their templates don't collide with more general
|
||||
"module" templates):
|
||||
|
||||
.. js:function:: QWeb2.Engine.add_template(templates)
|
||||
|
||||
Loads a template file (a collection of templates) in the QWeb
|
||||
instance. The templates can be specified as:
|
||||
|
||||
An XML string
|
||||
QWeb will attempt to parse it to an XML document then load
|
||||
it.
|
||||
|
||||
A URL
|
||||
QWeb will attempt to download the URL content, then load
|
||||
the resulting XML string.
|
||||
|
||||
A ``Document`` or ``Node``
|
||||
QWeb will traverse the first level of the document (the
|
||||
child nodes of the provided root) and load any named
|
||||
template or template override.
|
||||
|
||||
:type templates: String | Document | Node
|
||||
|
||||
A :js:class:`QWeb2.Engine` also exposes various attributes for
|
||||
behavior customization:
|
||||
|
||||
.. js:attribute:: QWeb2.Engine.prefix
|
||||
|
||||
Prefix used to recognize :ref:`directives <qweb-directives>`
|
||||
during parsing. A string. By default, ``t``.
|
||||
|
||||
.. js:attribute:: QWeb2.Engine.debug
|
||||
|
||||
Boolean flag putting the engine in "debug mode". Normally,
|
||||
QWeb intercepts any error raised during template execution. In
|
||||
debug mode, it leaves all exceptions go through without
|
||||
intercepting them.
|
||||
|
||||
.. js:attribute:: QWeb2.Engine.jQuery
|
||||
|
||||
The jQuery instance used during :ref:`template inheritance
|
||||
<qweb-directives-inheritance>` processing. Defaults to
|
||||
``window.jQuery``.
|
||||
|
||||
.. js:attribute:: QWeb2.Engine.preprocess_node
|
||||
|
||||
A ``Function``. If present, called before compiling each DOM
|
||||
node to template code. In OpenERP Web, this is used to
|
||||
automatically translate text content and some attributes in
|
||||
templates. Defaults to ``null``.
|
||||
|
||||
.. _qweb-directives:
|
||||
|
||||
Directives
|
||||
----------
|
||||
|
||||
A basic QWeb template is nothing more than an XHTML document (as it
|
||||
must be valid XML), which will be output as-is. But the rendering can
|
||||
be customized with bits of logic called "directives". Directives are
|
||||
attributes elements prefixed by :js:attr:`~QWeb2.Engine.prefix` (this
|
||||
document will use the default prefix ``t``, as does OpenERP Web).
|
||||
|
||||
A directive will usually control or alter the output of the element it
|
||||
is set on. If no suitable element is available, the prefix itself can
|
||||
be used as a "no-operation" element solely for supporting directives
|
||||
(or internal content, which will be rendered). This means:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<t>Something something</t>
|
||||
|
||||
will simply output the string "Something something" (the element
|
||||
itself will be skipped and "unwrapped"):
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
var e = new QWeb2.Engine();
|
||||
e.add_template('<templates>\
|
||||
<t t-name="test1"><t>Test 1</t></t>\
|
||||
<t t-name="test2"><span>Test 2</span></t>\
|
||||
</templates>');
|
||||
e.render('test1'); // Test 1
|
||||
e.render('test2'); // <span>Test 2</span>
|
||||
|
||||
.. note::
|
||||
|
||||
The conventions used in directive descriptions are the following:
|
||||
|
||||
* directives are described as compound functions, potentially with
|
||||
optional sections. Each section of the function name is an
|
||||
attribute of the element bearing the directive.
|
||||
|
||||
* a special parameter is ``BODY``, which does not have a name and
|
||||
designates the content of the element.
|
||||
|
||||
* special parameter types (aside from ``BODY`` which remains
|
||||
untyped) are ``Name``, which designates a valid javascript
|
||||
variable name, ``Expression`` which designates a valid
|
||||
javascript expression, and ``Format`` which designates a
|
||||
Ruby-style format string (a literal string with
|
||||
``#{Expression}`` inclusions executed and replaced by their
|
||||
result)
|
||||
|
||||
.. note::
|
||||
|
||||
``Expression`` actually supports a few extensions on the
|
||||
javascript syntax: because some syntactic elements of javascript
|
||||
are not compatible with XML and must be escaped, text
|
||||
substitutions are performed from forms which don't need to be
|
||||
escaped. Thus the following "keyword operators" are available in
|
||||
an ``Expression``: ``and`` (maps to ``&&``), ``or`` (maps to
|
||||
``||``), ``gt`` (maps to ``>``), ``gte`` (maps to ``>=``), ``lt``
|
||||
(maps to ``<``) and ``lte`` (maps to ``<=``).
|
||||
|
||||
.. _qweb-directives-templates:
|
||||
|
||||
Defining Templates
|
||||
++++++++++++++++++
|
||||
|
||||
.. _qweb-directive-name:
|
||||
|
||||
.. function:: t-name=name
|
||||
|
||||
:param String name: an arbitrary javascript string. Each template
|
||||
name is unique in a given
|
||||
:js:class:`QWeb2.Engine` instance, defining a
|
||||
new template with an existing name will
|
||||
overwrite the previous one without warning.
|
||||
|
||||
When multiple templates are related, it is
|
||||
customary to use dotted names as a kind of
|
||||
"namespace" e.g. ``foo`` and ``foo.bar`` which
|
||||
will be used either by ``foo`` or by a
|
||||
sub-widget of the widget used by ``foo``.
|
||||
|
||||
Templates can only be defined as the children of the document
|
||||
root. The document root's name is irrelevant (it's not checked)
|
||||
but is usually ``<templates>`` for simplicity.
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<templates>
|
||||
<t t-name="template1">
|
||||
<!-- template code -->
|
||||
</t>
|
||||
</templates>
|
||||
|
||||
:ref:`t-name <qweb-directive-name>` can be used on an element with
|
||||
an output as well:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<templates>
|
||||
<div t-name="template2">
|
||||
<!-- template code -->
|
||||
</div>
|
||||
</templates>
|
||||
|
||||
which ensures the template has a single root (if a template has
|
||||
multiple roots and is then passed directly to jQuery, odd things
|
||||
occur).
|
||||
|
||||
.. _qweb-directives-output:
|
||||
|
||||
Output
|
||||
++++++
|
||||
|
||||
.. _qweb-directive-esc:
|
||||
|
||||
.. function:: t-esc=content
|
||||
|
||||
:param Expression content:
|
||||
|
||||
Evaluates, html-escapes and outputs ``content``.
|
||||
|
||||
.. _qweb-directive-escf:
|
||||
|
||||
.. function:: t-escf=content
|
||||
|
||||
:param Format content:
|
||||
|
||||
Similar to :ref:`t-esc <qweb-directive-esc>` but evaluates a
|
||||
``Format`` instead of just an expression.
|
||||
|
||||
.. _qweb-directive-raw:
|
||||
|
||||
.. function:: t-raw=content
|
||||
|
||||
:param Expression content:
|
||||
|
||||
Similar to :ref:`t-esc <qweb-directive-esc>` but does *not*
|
||||
html-escape the result of evaluating ``content``. Should only ever
|
||||
be used for known-secure content, or will be an XSS attack vector.
|
||||
|
||||
.. _qweb-directive-rawf:
|
||||
|
||||
.. function:: t-rawf=content
|
||||
|
||||
:param Format content:
|
||||
|
||||
``Format``-based version of :ref:`t-raw <qweb-directive-raw>`.
|
||||
|
||||
.. _qweb-directive-att:
|
||||
|
||||
.. function:: t-att=map
|
||||
|
||||
:param Expression map:
|
||||
|
||||
Evaluates ``map`` expecting an ``Object`` result, sets each
|
||||
key:value pair as an attribute (and its value) on the holder
|
||||
element:
|
||||
|
||||
.. code-block:: xml
|
||||
|
||||
<span t-att="{foo: 3, bar: 42}"/>
|
||||
|
||||
will yield
|
||||
|
||||
.. code-block:: html
|
||||
|
||||
<span foo="3" bar="42"/>
|
||||
|
||||
.. function:: t-att-ATTNAME=value
|
||||
|
||||
:param Name ATTNAME:
|
||||
:param Expression value:
|
||||
|
||||
Evaluates ``value`` and sets it on the attribute ``ATTNAME`` on
|
||||
the holder element.
|
||||
|
||||
If ``value``'s result is ``undefined``, suppresses the creation of
|
||||
the attribute.
|
||||
|
||||
.. _qweb-directive-attf:
|
||||
|
||||
.. function:: t-attf-ATTNAME=value
|
||||
|
||||
:param Name ATTNAME:
|
||||
:param Format value:
|
||||
|
||||
Similar to :ref:`t-att-* <qweb-directive-att>` but the value of
|
||||
the attribute is specified via a ``Format`` instead of an
|
||||
expression. Useful for specifying e.g. classes mixing literal
|
||||
classes and computed ones.
|
||||
|
||||
.. _qweb-directives-flow:
|
||||
|
||||
Flow Control
|
||||
++++++++++++
|
||||
|
||||
.. _qweb-directive-set:
|
||||
|
||||
.. function:: t-set=name (t-value=value | BODY)
|
||||
|
||||
:param Name name:
|
||||
:param Expression value:
|
||||
:param BODY:
|
||||
|
||||
Creates a new binding in the template context. If ``value`` is
|
||||
specified, evaluates it and sets it to the specified
|
||||
``name``. Otherwise, processes ``BODY`` and uses that instead.
|
||||
|
||||
.. _qweb-directive-if:
|
||||
|
||||
.. function:: t-if=condition
|
||||
|
||||
:param Expression condition:
|
||||
|
||||
Evaluates ``condition``, suppresses the output of the holder
|
||||
element and its content of the result is falsy.
|
||||
|
||||
.. _qweb-directive-foreach:
|
||||
|
||||
.. function:: t-foreach=iterable [t-as=name]
|
||||
|
||||
:param Expression iterable:
|
||||
:param Name name:
|
||||
|
||||
Evaluates ``iterable``, iterates on it and evaluates the holder
|
||||
element and its body once per iteration round.
|
||||
|
||||
If ``name`` is not specified, computes a ``name`` based on
|
||||
``iterable`` (by replacing non-``Name`` characters by ``_``).
|
||||
|
||||
If ``iterable`` yields a ``Number``, treats it as a range from 0
|
||||
to that number (excluded).
|
||||
|
||||
While iterating, :ref:`t-foreach <qweb-directive-foreach>` adds a
|
||||
number of variables in the context:
|
||||
|
||||
``#{name}``
|
||||
If iterating on an array (or a range), the current value in
|
||||
the iteration. If iterating on an *object*, the current key.
|
||||
``#{name}_all``
|
||||
The collection being iterated (the array generated for a
|
||||
``Number``)
|
||||
``#{name}_value``
|
||||
The current iteration value (current item for an array, value
|
||||
for the current item for an object)
|
||||
``#{name}_index``
|
||||
The 0-based index of the current iteration round.
|
||||
``#{name}_first``
|
||||
Whether the current iteration round is the first one.
|
||||
``#{name}_parity``
|
||||
``"odd"`` if the current iteration round is odd, ``"even"``
|
||||
otherwise. ``0`` is considered even.
|
||||
|
||||
.. _qweb-directive-call:
|
||||
|
||||
.. function:: t-call=template [BODY]
|
||||
|
||||
:param String template:
|
||||
:param BODY:
|
||||
|
||||
Calls the specified ``template`` and returns its result. If
|
||||
``BODY`` is specified, it is evaluated *before* calling
|
||||
``template`` and can be used to specify e.g. parameters. This
|
||||
usage is similar to `call-template with with-param in XSLT
|
||||
<http://zvon.org/xxl/XSLTreference/OutputOverview/xslt_with-param_frame.html>`_.
|
||||
|
||||
.. _qweb-directives-inheritance:
|
||||
|
||||
Template Inheritance and Extension
|
||||
++++++++++++++++++++++++++++++++++
|
||||
|
||||
.. _qweb-directive-extend:
|
||||
|
||||
.. function:: t-extend=template BODY
|
||||
|
||||
:param String template: name of the template to extend
|
||||
|
||||
Works similarly to OpenERP models: if used on its own, will alter
|
||||
the specified template in-place; if used in conjunction with
|
||||
:ref:`t-name <qweb-directive-name>` will create a new template
|
||||
using the old one as a base.
|
||||
|
||||
``BODY`` should be a sequence of :ref:`t-jquery
|
||||
<qweb-directive-jquery>` alteration directives.
|
||||
|
||||
.. note::
|
||||
|
||||
The inheritance in the second form is *static*: the parent
|
||||
template is copied and transformed when :ref:`t-extend
|
||||
<qweb-directive-extend>` is called. If it is altered later (by
|
||||
a :ref:`t-extend <qweb-directive-extend>` without a
|
||||
:ref:`t-name <qweb-directive-name>`), these changes will *not*
|
||||
appear in the "child" templates.
|
||||
|
||||
.. _qweb-directive-jquery:
|
||||
|
||||
.. function:: t-jquery=selector [t-operation=operation] BODY
|
||||
|
||||
:param String selector: a CSS selector into the parent template
|
||||
:param operation: one of ``append``, ``prepend``, ``before``,
|
||||
``after``, ``inner`` or ``replace``.
|
||||
:param BODY: ``operation`` argument, or alterations to perform
|
||||
|
||||
* If ``operation`` is specified, applies the selector to the
|
||||
parent template to find a *context node*, then applies
|
||||
``operation`` (as a jQuery operation) to the *context node*,
|
||||
passing ``BODY`` as parameter.
|
||||
|
||||
.. note::
|
||||
|
||||
``replace`` maps to jQuery's `replaceWith(newContent)
|
||||
<http://api.jquery.com/replaceWith/>`_, ``inner`` maps to
|
||||
`html(htmlString) <http://api.jquery.com/html/>`_.
|
||||
|
||||
* If ``operation`` is not provided, ``BODY`` is evaluated as
|
||||
javascript code, with the *context node* as ``this``.
|
||||
|
||||
.. warning::
|
||||
|
||||
While this second form is much more powerful than the first,
|
||||
it is also much harder to read and maintain and should be
|
||||
avoided. It is usually possible to either avoid it or
|
||||
replace it with a sequence of ``t-jquery:t-operation:``.
|
||||
|
||||
Escape Hatches / debugging
|
||||
++++++++++++++++++++++++++
|
||||
|
||||
.. _qweb-directive-log:
|
||||
|
||||
.. function:: t-log=expression
|
||||
|
||||
:param Expression expression:
|
||||
|
||||
Evaluates the provided expression (in the current template
|
||||
context) and logs its result via ``console.log``.
|
||||
|
||||
.. _qweb-directive-debug:
|
||||
|
||||
.. function:: t-debug
|
||||
|
||||
Injects a debugger breakpoint (via the ``debugger;`` statement) in
|
||||
the compiled template output.
|
||||
|
||||
.. _qweb-directive-js:
|
||||
|
||||
.. function:: t-js=context BODY
|
||||
|
||||
:param Name context:
|
||||
:param BODY: javascript code
|
||||
|
||||
Injects the provided ``BODY`` javascript code into the compiled
|
||||
template, passing it the current template context using the name
|
||||
specified by ``context``.
|
||||
|
||||
@@ -33,6 +33,8 @@ view. It provides a number of services to handle a section of a page:
|
||||
|
||||
* Backbone-compatible shortcuts
|
||||
|
||||
.. _widget-dom_root:
|
||||
|
||||
DOM Root
|
||||
--------
|
||||
|
||||
|
||||
+14
-13
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-12-04 20:16+0000\n"
|
||||
"Last-Translator: Santi (Pexego) <santiago@pexego.es>\n"
|
||||
"PO-Revision-Date: 2012-12-07 19:11+0000\n"
|
||||
"Last-Translator: Eduardo Alberto Calvo <Unknown>\n"
|
||||
"Language-Team: Spanish <es@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-05 05:42+0000\n"
|
||||
"X-Generator: Launchpad (build 16335)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -609,7 +609,7 @@ msgstr "Formatos de Exportación"
|
||||
#: code:addons/web/static/src/xml/base.xml:952
|
||||
#, python-format
|
||||
msgid "On change:"
|
||||
msgstr "On change:"
|
||||
msgstr "Al cambiar:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -863,7 +863,7 @@ msgstr "Preferencias"
|
||||
#: code:addons/web/static/src/js/view_form.js:434
|
||||
#, python-format
|
||||
msgid "Wrong on change format: %s"
|
||||
msgstr ""
|
||||
msgstr "Error en el cambio de formato: %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1255,7 +1255,7 @@ msgstr "Agrupar por: %s"
|
||||
#: code:addons/web/static/src/js/view_form.js:151
|
||||
#, python-format
|
||||
msgid "No data provided."
|
||||
msgstr ""
|
||||
msgstr "No se han facilitado datos"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1326,7 +1326,7 @@ msgstr "%(page)d/%(page_count)d"
|
||||
#: code:addons/web/static/src/js/chrome.js:397
|
||||
#, python-format
|
||||
msgid "The confirmation does not match the password"
|
||||
msgstr ""
|
||||
msgstr "La confirmación no coincide con la contraseña"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1417,7 +1417,7 @@ msgstr "es igual a"
|
||||
#: code:addons/web/static/src/js/views.js:1455
|
||||
#, python-format
|
||||
msgid "Could not serialize XML"
|
||||
msgstr ""
|
||||
msgstr "No pudo serializar el XML"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2229,7 +2229,7 @@ msgstr "No se encontró contenido para el campo '%s' en '%s:%s'"
|
||||
#: code:addons/web/static/src/xml/base.xml:304
|
||||
#, python-format
|
||||
msgid "Database Management"
|
||||
msgstr ""
|
||||
msgstr "Administración base de datos"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2315,7 +2315,7 @@ msgstr "Agregar condición"
|
||||
#: code:addons/web/static/src/js/coresetup.js:620
|
||||
#, python-format
|
||||
msgid "Still loading..."
|
||||
msgstr ""
|
||||
msgstr "Aún cargando..."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2331,6 +2331,7 @@ msgstr ""
|
||||
#, python-format
|
||||
msgid "The o2m record must be saved before an action can be used"
|
||||
msgstr ""
|
||||
"El registro O2M debe guardarse antes que una acción pueda ser utilizada"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2372,7 +2373,7 @@ msgstr "Disparador activado desde la vista de búsqueda"
|
||||
#: code:addons/web/static/src/js/search.js:980
|
||||
#, python-format
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
msgstr "Filtro"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2414,7 +2415,7 @@ msgstr "Editar Flujo de trabajo"
|
||||
#: code:addons/web/static/src/js/views.js:1172
|
||||
#, python-format
|
||||
msgid "Do you really want to delete this attachment ?"
|
||||
msgstr ""
|
||||
msgstr "¿Realmente quiere borrar este adjunto?"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
+23
-23
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-28 01:51+0000\n"
|
||||
"PO-Revision-Date: 2012-12-07 13:23+0000\n"
|
||||
"Last-Translator: fshahy <fshahy@gmail.com>\n"
|
||||
"Language-Team: Persian <fa@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -36,7 +36,7 @@ msgstr "%d دقیقه پیش"
|
||||
#: code:addons/web/static/src/js/coresetup.js:621
|
||||
#, python-format
|
||||
msgid "Still loading...<br />Please be patient."
|
||||
msgstr ""
|
||||
msgstr "در حال بارگذاری...</ br> لطفا صبر کنید."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -59,7 +59,7 @@ msgstr "کوچکتر یا مساوی"
|
||||
#: code:addons/web/static/src/js/chrome.js:393
|
||||
#, python-format
|
||||
msgid "Please enter your previous password"
|
||||
msgstr ""
|
||||
msgstr "لطفا کلمه عبور قبلی خود را وارد کنید."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -68,21 +68,21 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:282
|
||||
#, python-format
|
||||
msgid "Master password:"
|
||||
msgstr ""
|
||||
msgstr "کلمه عبور اصلی:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:274
|
||||
#, python-format
|
||||
msgid "Change Master Password"
|
||||
msgstr ""
|
||||
msgstr "تغییر کلمه عبور اصلی"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:491
|
||||
#, python-format
|
||||
msgid "Do you really want to delete the database: %s ?"
|
||||
msgstr ""
|
||||
msgstr "آیا پایگاه داده حذف شود: %s ؟"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -96,14 +96,14 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/chrome.js:537
|
||||
#, python-format
|
||||
msgid "Access Denied"
|
||||
msgstr ""
|
||||
msgstr "امکان دسترسی وجود ندارد"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/coresetup.js:594
|
||||
#, python-format
|
||||
msgid "about an hour ago"
|
||||
msgstr ""
|
||||
msgstr "حدود یک ساعت قبل"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -112,7 +112,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:216
|
||||
#, python-format
|
||||
msgid "Backup Database"
|
||||
msgstr ""
|
||||
msgstr "تهیه کپی پشتیبان از پایگاه داده"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -120,7 +120,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/dates.js:53
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid date"
|
||||
msgstr ""
|
||||
msgstr "'%s' یک تاریخ معتبر نیست"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -134,7 +134,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/coresetup.js:592
|
||||
#, python-format
|
||||
msgid "about a minute ago"
|
||||
msgstr ""
|
||||
msgstr "حدود یک دقیقه قبل"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -147,14 +147,14 @@ msgstr "فایل"
|
||||
#: code:addons/web/controllers/main.py:842
|
||||
#, python-format
|
||||
msgid "You cannot leave any password empty."
|
||||
msgstr ""
|
||||
msgstr "هیچ یک از فیلد های کلمه عبور نباید خالی باشد."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:681
|
||||
#, python-format
|
||||
msgid "Invalid username or password"
|
||||
msgstr ""
|
||||
msgstr "نام کاربری یا کلمه عبور معتبر نیست"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -163,7 +163,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:260
|
||||
#, python-format
|
||||
msgid "Master Password:"
|
||||
msgstr ""
|
||||
msgstr "کلمه عبور اصلی:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -171,14 +171,14 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:1349
|
||||
#, python-format
|
||||
msgid "Select"
|
||||
msgstr ""
|
||||
msgstr "انتخاب"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:549
|
||||
#, python-format
|
||||
msgid "Database restored successfully"
|
||||
msgstr ""
|
||||
msgstr "پایگاه داده با موفقیت بازیابی شد"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -192,7 +192,7 @@ msgstr "نسخه"
|
||||
#: code:addons/web/static/src/xml/base.xml:564
|
||||
#, python-format
|
||||
msgid "Latest Modification Date:"
|
||||
msgstr ""
|
||||
msgstr "تاریخ آخرین تغییر"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -213,7 +213,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:1583
|
||||
#, python-format
|
||||
msgid "Share with all users"
|
||||
msgstr ""
|
||||
msgstr "اشتراک با همه کاربران"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -221,7 +221,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/view_form.js:319
|
||||
#, python-format
|
||||
msgid "Form"
|
||||
msgstr ""
|
||||
msgstr "فرم"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -270,14 +270,14 @@ msgstr "تعریف نشده"
|
||||
#: code:addons/web/static/src/js/view_form.js:4831
|
||||
#, python-format
|
||||
msgid "File Upload"
|
||||
msgstr ""
|
||||
msgstr "آپلود فایل"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/coresetup.js:598
|
||||
#, python-format
|
||||
msgid "about a month ago"
|
||||
msgstr ""
|
||||
msgstr "حدود یک ماه قبل"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
+84
-76
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-24 19:05+0000\n"
|
||||
"PO-Revision-Date: 2012-12-09 18:47+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -59,7 +59,7 @@ msgstr "manje ili jednako od"
|
||||
#: code:addons/web/static/src/js/chrome.js:393
|
||||
#, python-format
|
||||
msgid "Please enter your previous password"
|
||||
msgstr ""
|
||||
msgstr "Upišite trenutno važeću lozinku"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -68,7 +68,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:282
|
||||
#, python-format
|
||||
msgid "Master password:"
|
||||
msgstr "Glavna zaporka"
|
||||
msgstr "Glavna lozinka"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -82,7 +82,7 @@ msgstr "Promijeni glavnu lozinku"
|
||||
#: code:addons/web/static/src/js/chrome.js:491
|
||||
#, python-format
|
||||
msgid "Do you really want to delete the database: %s ?"
|
||||
msgstr ""
|
||||
msgstr "Zaista želite obrisati bazu podataka: %s ?"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -96,7 +96,7 @@ msgstr "Traži %(field)s at: %(value)s"
|
||||
#: code:addons/web/static/src/js/chrome.js:537
|
||||
#, python-format
|
||||
msgid "Access Denied"
|
||||
msgstr ""
|
||||
msgstr "Pristup odbijen / zabranjen"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -120,7 +120,7 @@ msgstr "Backup baze podataka"
|
||||
#: code:addons/web/static/src/js/dates.js:53
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid date"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravan datum"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -147,14 +147,14 @@ msgstr "Datoteka"
|
||||
#: code:addons/web/controllers/main.py:842
|
||||
#, python-format
|
||||
msgid "You cannot leave any password empty."
|
||||
msgstr ""
|
||||
msgstr "Popunite sva polja."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:681
|
||||
#, python-format
|
||||
msgid "Invalid username or password"
|
||||
msgstr "Neispravno korisničko ime ili zaporka."
|
||||
msgstr "Neispravno korisničko ime ili lozinka."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -163,7 +163,7 @@ msgstr "Neispravno korisničko ime ili zaporka."
|
||||
#: code:addons/web/static/src/xml/base.xml:260
|
||||
#, python-format
|
||||
msgid "Master Password:"
|
||||
msgstr "Glavna zaporka"
|
||||
msgstr "Glavna lozinka"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -207,7 +207,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/view_form.js:1242
|
||||
#, python-format
|
||||
msgid "Widget type '%s' is not implemented"
|
||||
msgstr ""
|
||||
msgstr "Widget tipa '%s' nije implementiran"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -236,7 +236,7 @@ msgstr "(prazno)"
|
||||
#: code:addons/web/static/src/js/formats.js:282
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct time"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravno vrijeme"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -250,7 +250,7 @@ msgstr "nije ispravan broj"
|
||||
#: code:addons/web/static/src/xml/base.xml:325
|
||||
#, python-format
|
||||
msgid "New Password:"
|
||||
msgstr "Nova zaporka:"
|
||||
msgstr "Nova lozinka:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -271,7 +271,7 @@ msgstr "Nedefiniran"
|
||||
#: code:addons/web/static/src/js/view_form.js:4831
|
||||
#, python-format
|
||||
msgid "File Upload"
|
||||
msgstr ""
|
||||
msgstr "Slanje datoteke"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -328,14 +328,14 @@ msgstr "Dupliciraj bazu podataka"
|
||||
#: code:addons/web/static/src/xml/base.xml:336
|
||||
#, python-format
|
||||
msgid "Change Password"
|
||||
msgstr "Promijeni zaporku"
|
||||
msgstr "Promijeni lozinku"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_form.js:3382
|
||||
#, python-format
|
||||
msgid "View type '%s' is not supported in One2Many."
|
||||
msgstr ""
|
||||
msgstr "Pogled tipa '%s' nije podržan za JedanNaViše (One2Many) polja."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -350,7 +350,7 @@ msgstr "Preuzimanje"
|
||||
#: code:addons/web/static/src/js/formats.js:266
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct datetime"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravno vrijeme"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -378,13 +378,13 @@ msgstr "Odabir:"
|
||||
#: code:addons/web/static/src/js/view_form.js:869
|
||||
#, python-format
|
||||
msgid "The following fields are invalid:"
|
||||
msgstr ""
|
||||
msgstr "Popis neispravnih polja:"
|
||||
|
||||
#. module: web
|
||||
#: code:addons/web/controllers/main.py:863
|
||||
#, python-format
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
msgstr "Jezici"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -405,7 +405,7 @@ msgstr "Uvoz"
|
||||
#: code:addons/web/static/src/js/chrome.js:543
|
||||
#, python-format
|
||||
msgid "Could not restore the database"
|
||||
msgstr ""
|
||||
msgstr "Oporavak baze podataka nije uspješno dovršen"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -518,7 +518,7 @@ msgstr "Operator %s nije podržan unutar domene %s"
|
||||
#: code:addons/web/static/src/js/formats.js:242
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct float"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravna decimalna vrijednost"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -532,7 +532,7 @@ msgstr "Oporavljeno"
|
||||
#: code:addons/web/static/src/js/view_list.js:392
|
||||
#, python-format
|
||||
msgid "%d-%d of %d"
|
||||
msgstr ""
|
||||
msgstr "%d-%d od %d"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -546,14 +546,14 @@ msgstr "Kreiraj i uredi"
|
||||
#: code:addons/web/static/src/js/pyeval.js:731
|
||||
#, python-format
|
||||
msgid "Unknown nonliteral type "
|
||||
msgstr ""
|
||||
msgstr "Nepoznat tip podatka "
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_form.js:2345
|
||||
#, python-format
|
||||
msgid "Resource error"
|
||||
msgstr ""
|
||||
msgstr "Greška resursa"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -574,7 +574,7 @@ msgstr "Ispiši tijek rada"
|
||||
#: code:addons/web/static/src/js/chrome.js:396
|
||||
#, python-format
|
||||
msgid "Please confirm your new password"
|
||||
msgstr ""
|
||||
msgstr "Potvrdite Vašu novu zaporku"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -623,7 +623,7 @@ msgstr "Polja %s modela"
|
||||
#: code:addons/web/static/src/js/view_list.js:890
|
||||
#, python-format
|
||||
msgid "Setting 'id' attribute on existing record %s"
|
||||
msgstr ""
|
||||
msgstr "Postavljanje 'id' atributa na postojećem zapisu %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -668,13 +668,15 @@ msgstr "Action ID:"
|
||||
#, python-format
|
||||
msgid "Your user's preference timezone does not match your browser timezone:"
|
||||
msgstr ""
|
||||
"Pojasno vrijeme u Vašim korisničkim podacima ne odgovara pojasnom vremenu "
|
||||
"zadanom u Vašem Internet pretraživaču"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_form.js:1238
|
||||
#, python-format
|
||||
msgid "Field '%s' specified in view could not be found."
|
||||
msgstr ""
|
||||
msgstr "Ne postoji polje '%s', a navedeno je u definiciji pogleda."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -688,7 +690,7 @@ msgstr "Snimljeni izvozi"
|
||||
#: code:addons/web/static/src/xml/base.xml:320
|
||||
#, python-format
|
||||
msgid "Old Password:"
|
||||
msgstr "Stara zaporka:"
|
||||
msgstr "Stara lozinka:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -702,7 +704,7 @@ msgstr "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"
|
||||
#: code:addons/web/static/src/js/chrome.js:481
|
||||
#, python-format
|
||||
msgid "The database has been duplicated."
|
||||
msgstr ""
|
||||
msgstr "Baza podataka je duplicirana."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -731,7 +733,7 @@ msgstr "Spremi kao"
|
||||
#: code:addons/web/static/src/js/view_form.js:2316
|
||||
#, python-format
|
||||
msgid "E-mail error"
|
||||
msgstr ""
|
||||
msgstr "E-mail greška"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -793,7 +795,7 @@ msgstr "Graničnik:"
|
||||
#: code:addons/web/static/src/xml/base.xml:458
|
||||
#, python-format
|
||||
msgid "Browser's timezone"
|
||||
msgstr ""
|
||||
msgstr "Pojasno vrijeme internet preglednika"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -838,7 +840,7 @@ msgstr "OpenERP.com"
|
||||
#: code:addons/web/static/src/js/view_form.js:2316
|
||||
#, python-format
|
||||
msgid "Can't send email to invalid e-mail address"
|
||||
msgstr ""
|
||||
msgstr "Nije moguće poslati email na neispravne e-mail adrese"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -859,7 +861,7 @@ msgstr "Postavke"
|
||||
#: code:addons/web/static/src/js/view_form.js:434
|
||||
#, python-format
|
||||
msgid "Wrong on change format: %s"
|
||||
msgstr ""
|
||||
msgstr "Greška u promjeni formata: %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -874,7 +876,7 @@ msgstr "Obriši bazu podataka"
|
||||
#: code:addons/web/static/src/xml/base.xml:462
|
||||
#, python-format
|
||||
msgid "Click here to change your user's timezone."
|
||||
msgstr ""
|
||||
msgstr "Kliknite ovdje za promjenu korisničkog pojasnog vremena"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -920,21 +922,21 @@ msgstr "Korisničko ime"
|
||||
#: code:addons/web/static/src/js/chrome.js:481
|
||||
#, python-format
|
||||
msgid "Duplicating database"
|
||||
msgstr ""
|
||||
msgstr "Dupliciram bazu podataka"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:563
|
||||
#, python-format
|
||||
msgid "Password has been changed successfully"
|
||||
msgstr ""
|
||||
msgstr "Lozinka uspješno promjenjena"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_list_editable.js:781
|
||||
#, python-format
|
||||
msgid "The form's data can not be discarded"
|
||||
msgstr ""
|
||||
msgstr "Podaci (form's data) se ne mogu odbaciti"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -969,6 +971,10 @@ msgid ""
|
||||
"\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
"Greška lokalne evaluacije\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1003,7 +1009,7 @@ msgstr "Kreirano:"
|
||||
#: code:addons/web/controllers/main.py:851
|
||||
#, python-format
|
||||
msgid "Error, password not changed !"
|
||||
msgstr ""
|
||||
msgstr "Greška, lozika nije promjenjena!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1025,7 +1031,7 @@ msgstr "/web/binary/upload_attachment"
|
||||
#: code:addons/web/static/src/js/chrome.js:563
|
||||
#, python-format
|
||||
msgid "Changed Password"
|
||||
msgstr ""
|
||||
msgstr "Promjenjena lozinka"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1059,14 +1065,14 @@ msgstr "Arhiviranje/Backup"
|
||||
#: code:addons/web/static/src/js/dates.js:80
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid time"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravno vrijeme"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/formats.js:274
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct date"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravan datum"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1120,7 +1126,7 @@ msgstr "Zadnju promjenu napravio:"
|
||||
#: code:addons/web/static/src/xml/base.xml:466
|
||||
#, python-format
|
||||
msgid "Timezone mismatch"
|
||||
msgstr ""
|
||||
msgstr "Neslaganje vremenskih pojasa"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1189,7 +1195,7 @@ msgstr "Dodaj napredni filter"
|
||||
#: code:addons/web/controllers/main.py:844
|
||||
#, python-format
|
||||
msgid "The new password and its confirmation must be identical."
|
||||
msgstr ""
|
||||
msgstr "Nova lozinka i potvrda lozinke moraju biti identične."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1204,7 +1210,7 @@ msgstr "Povrati bazu podataka"
|
||||
#: code:addons/web/static/src/js/chrome.js:645
|
||||
#, python-format
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
msgstr "Prijava"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1247,7 +1253,7 @@ msgstr "Grupiraj po: %s"
|
||||
#: code:addons/web/static/src/js/view_form.js:151
|
||||
#, python-format
|
||||
msgid "No data provided."
|
||||
msgstr ""
|
||||
msgstr "Nema podataka."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1290,7 +1296,7 @@ msgstr "Neispravna pretraga"
|
||||
#: code:addons/web/static/src/js/view_list.js:959
|
||||
#, python-format
|
||||
msgid "Could not find id in dataset"
|
||||
msgstr ""
|
||||
msgstr "Id nije pronađen u podacima"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1318,7 +1324,7 @@ msgstr "%(page)d/%(page_count)d"
|
||||
#: code:addons/web/static/src/js/chrome.js:397
|
||||
#, python-format
|
||||
msgid "The confirmation does not match the password"
|
||||
msgstr ""
|
||||
msgstr "Nova lozinka i potvrda su različite"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1357,7 +1363,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:393
|
||||
#, python-format
|
||||
msgid "99+"
|
||||
msgstr ""
|
||||
msgstr "99+"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1371,7 +1377,7 @@ msgstr "1. Uvezi .CSV datoteku"
|
||||
#: code:addons/web/static/src/js/chrome.js:645
|
||||
#, python-format
|
||||
msgid "No database selected !"
|
||||
msgstr ""
|
||||
msgstr "Nije odabrana baza podataka"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1409,7 +1415,7 @@ msgstr "je jednako"
|
||||
#: code:addons/web/static/src/js/views.js:1455
|
||||
#, python-format
|
||||
msgid "Could not serialize XML"
|
||||
msgstr ""
|
||||
msgstr "Could not serialize XML"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1513,14 +1519,14 @@ msgstr "Stablo"
|
||||
#: code:addons/web/controllers/main.py:766
|
||||
#, python-format
|
||||
msgid "Could not drop database !"
|
||||
msgstr ""
|
||||
msgstr "Brisanje baze podataka nije uspjelo!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/formats.js:227
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct integer"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravna cjelobrojna vrijednost"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1541,7 +1547,7 @@ msgstr "Nepoznato polje %s unutar domene %s"
|
||||
#: code:addons/web/static/src/js/views.js:1421
|
||||
#, python-format
|
||||
msgid "Node [%s] is not a JSONified XML node"
|
||||
msgstr ""
|
||||
msgstr "Node [%s] nije JSONified XML node"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1555,7 +1561,7 @@ msgstr "Napredno pretraživanje"
|
||||
#: code:addons/web/static/src/js/chrome.js:499
|
||||
#, python-format
|
||||
msgid "Dropping database"
|
||||
msgstr ""
|
||||
msgstr "Brisanje baze podataka"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1578,7 +1584,7 @@ msgstr "Da"
|
||||
#: code:addons/web/static/src/js/view_form.js:4831
|
||||
#, python-format
|
||||
msgid "There was a problem while uploading your file"
|
||||
msgstr ""
|
||||
msgstr "Pojavio se problem kod učitavanja vaše datoteke"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1620,7 +1626,7 @@ msgstr "%d godina prije"
|
||||
#: code:addons/web/static/src/js/view_list.js:1019
|
||||
#, python-format
|
||||
msgid "Unknown m2m command %s"
|
||||
msgstr ""
|
||||
msgstr "Napoznata m2m naredba %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1643,14 +1649,14 @@ msgstr "Naziv nove baze podataka:"
|
||||
#: code:addons/web/static/src/js/chrome.js:394
|
||||
#, python-format
|
||||
msgid "Please enter your new password"
|
||||
msgstr ""
|
||||
msgstr "Molim, unesite novu lozinku"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/views.js:1463
|
||||
#, python-format
|
||||
msgid "Could not parse string to xml"
|
||||
msgstr ""
|
||||
msgstr "Could not parse string to xml"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1699,7 +1705,7 @@ msgstr "Copyright © 2004-TODAY OpenERP SA. Sva prava pridržana."
|
||||
#: code:addons/web/static/src/js/view_form.js:2345
|
||||
#, python-format
|
||||
msgid "This resource is empty"
|
||||
msgstr ""
|
||||
msgstr "Ovaj resurs je prazan"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1757,7 +1763,7 @@ msgstr "Polja pogleda"
|
||||
#: code:addons/web/static/src/xml/base.xml:330
|
||||
#, python-format
|
||||
msgid "Confirm New Password:"
|
||||
msgstr ""
|
||||
msgstr "Potvrda nove zaporke:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1908,7 +1914,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/view_form.js:319
|
||||
#, python-format
|
||||
msgid "The record could not be found in the database."
|
||||
msgstr ""
|
||||
msgstr "Zapis nije pronađen u bazi podataka."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1929,7 +1935,7 @@ msgstr "Tip:"
|
||||
#: code:addons/web/static/src/js/chrome.js:538
|
||||
#, python-format
|
||||
msgid "Incorrect super-administrator password"
|
||||
msgstr ""
|
||||
msgstr "Neispravna lozinka super-administratora"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1971,6 +1977,8 @@ msgid ""
|
||||
"The type of the field '%s' must be a many2many field with a relation to "
|
||||
"'ir.attachment' model."
|
||||
msgstr ""
|
||||
"Tip polja '%s' mora biti VišeNaViše (many2many) polje u relaciji sa "
|
||||
"'ir.attachment' (privici) modelom."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2035,14 +2043,14 @@ msgstr "Učitaj demonstracijske podatke:"
|
||||
#: code:addons/web/static/src/js/dates.js:26
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid datetime"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravno vrijeme"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/views.js:1471
|
||||
#, python-format
|
||||
msgid "Could not find a DOM Parser: %s"
|
||||
msgstr ""
|
||||
msgstr "Could not find a DOM Parser: %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2122,14 +2130,14 @@ msgstr "Preuzimanje \"%s\""
|
||||
#: code:addons/web/static/src/js/view_form.js:324
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
msgstr "Nova(i)"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_list.js:1746
|
||||
#, python-format
|
||||
msgid "Can't convert value %s to context"
|
||||
msgstr ""
|
||||
msgstr "Vrijednost %s ne odgovara za context"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2202,13 +2210,13 @@ msgstr "O OpenERP-u"
|
||||
#: code:addons/web/static/src/js/formats.js:297
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct date, datetime nor time"
|
||||
msgstr ""
|
||||
msgstr "'%s' nije ispravno vrijeme ili datum"
|
||||
|
||||
#. module: web
|
||||
#: code:addons/web/controllers/main.py:1306
|
||||
#, python-format
|
||||
msgid "No content found for field '%s' on '%s:%s'"
|
||||
msgstr ""
|
||||
msgstr "Nedostaje kontekst za polje '%s' na '%s:%s'"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2236,7 +2244,7 @@ msgstr "Upravljanje bazama podataka"
|
||||
#: code:addons/web/static/src/js/pyeval.js:765
|
||||
#, python-format
|
||||
msgid "Evaluation Error"
|
||||
msgstr ""
|
||||
msgstr "Greška evaluacije"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2269,7 +2277,7 @@ msgstr "Ne"
|
||||
#: code:addons/web/static/src/js/formats.js:309
|
||||
#, python-format
|
||||
msgid "'%s' is not convertible to date, datetime nor time"
|
||||
msgstr ""
|
||||
msgstr "Interpretacija '%s' ne reultira datumom ili vremenom"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2344,7 +2352,7 @@ msgstr "Polje je prazno. Ništa za snimanje !"
|
||||
#: code:addons/web/static/src/js/view_list.js:1327
|
||||
#, python-format
|
||||
msgid "%s (%d)"
|
||||
msgstr ""
|
||||
msgstr "%s (%d)"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2407,7 +2415,7 @@ msgstr "Obrisati privitak?"
|
||||
#: code:addons/web/static/src/js/views.js:838
|
||||
#, python-format
|
||||
msgid "Technical Translation"
|
||||
msgstr ""
|
||||
msgstr "tehnički prijevod"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2421,14 +2429,14 @@ msgstr "Polje:"
|
||||
#: code:addons/web/static/src/js/chrome.js:499
|
||||
#, python-format
|
||||
msgid "The database %s has been dropped"
|
||||
msgstr ""
|
||||
msgstr "Baza podataka %s je obrisana"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:456
|
||||
#, python-format
|
||||
msgid "User's timezone"
|
||||
msgstr ""
|
||||
msgstr "Korisnikov vremenski pojas"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2457,7 +2465,7 @@ msgstr "Posebno:"
|
||||
#, python-format
|
||||
msgid ""
|
||||
"The old password you provided is incorrect, your password was not changed."
|
||||
msgstr ""
|
||||
msgstr "Trenutna lozinka nije točno upisana. Lozinka nije promijenjena."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
+71
-59
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-25 07:07+0000\n"
|
||||
"PO-Revision-Date: 2012-12-05 18:18+0000\n"
|
||||
"Last-Translator: Erwin van der Ploeg (Endian Solutions) <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-06 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -59,7 +59,7 @@ msgstr "is kleiner of gelijk aan"
|
||||
#: code:addons/web/static/src/js/chrome.js:393
|
||||
#, python-format
|
||||
msgid "Please enter your previous password"
|
||||
msgstr ""
|
||||
msgstr "Geef uw vorige wachtwoord in"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -82,7 +82,7 @@ msgstr "Wijzig hoofdwachtwoord"
|
||||
#: code:addons/web/static/src/js/chrome.js:491
|
||||
#, python-format
|
||||
msgid "Do you really want to delete the database: %s ?"
|
||||
msgstr ""
|
||||
msgstr "Weet u zeker dat u database %s wilt verwijderen?"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -96,7 +96,7 @@ msgstr "Zoek %(field)s bij: %(value)s"
|
||||
#: code:addons/web/static/src/js/chrome.js:537
|
||||
#, python-format
|
||||
msgid "Access Denied"
|
||||
msgstr ""
|
||||
msgstr "Toegang geweigerd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -120,7 +120,7 @@ msgstr "Back-up database"
|
||||
#: code:addons/web/static/src/js/dates.js:53
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid date"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen geldige datum"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -147,7 +147,7 @@ msgstr "Bestand"
|
||||
#: code:addons/web/controllers/main.py:842
|
||||
#, python-format
|
||||
msgid "You cannot leave any password empty."
|
||||
msgstr ""
|
||||
msgstr "Het is niet toegestaan om de wachtwoord velden leeg te laten."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -206,7 +206,7 @@ msgstr "M2O zoek velden behandelen momenteel geen meerdere standaard waardes"
|
||||
#: code:addons/web/static/src/js/view_form.js:1242
|
||||
#, python-format
|
||||
msgid "Widget type '%s' is not implemented"
|
||||
msgstr ""
|
||||
msgstr "Widget type '%s' is niet geimplementeerd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -235,7 +235,7 @@ msgstr "(no string)"
|
||||
#: code:addons/web/static/src/js/formats.js:282
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct time"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen geldige tijd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -334,7 +334,7 @@ msgstr "Wachtwoord wijzigen"
|
||||
#: code:addons/web/static/src/js/view_form.js:3382
|
||||
#, python-format
|
||||
msgid "View type '%s' is not supported in One2Many."
|
||||
msgstr ""
|
||||
msgstr "Weergave type '%s' wordt niet ondersteund in One2Many."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -349,7 +349,7 @@ msgstr "Downloaden"
|
||||
#: code:addons/web/static/src/js/formats.js:266
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct datetime"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen geldinge datum/tijd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -377,13 +377,13 @@ msgstr "Selectie:"
|
||||
#: code:addons/web/static/src/js/view_form.js:869
|
||||
#, python-format
|
||||
msgid "The following fields are invalid:"
|
||||
msgstr ""
|
||||
msgstr "De volgende velden zijn ongeldig:"
|
||||
|
||||
#. module: web
|
||||
#: code:addons/web/controllers/main.py:863
|
||||
#, python-format
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
msgstr "Talen"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -404,7 +404,7 @@ msgstr "Importeren"
|
||||
#: code:addons/web/static/src/js/chrome.js:543
|
||||
#, python-format
|
||||
msgid "Could not restore the database"
|
||||
msgstr ""
|
||||
msgstr "Het was niet mogelijk om de database te herstellen"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -517,7 +517,7 @@ msgstr "Niet ondersteunde operator %s in domein %s"
|
||||
#: code:addons/web/static/src/js/formats.js:242
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct float"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen correcte float"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -531,7 +531,7 @@ msgstr "Teruggezet"
|
||||
#: code:addons/web/static/src/js/view_list.js:392
|
||||
#, python-format
|
||||
msgid "%d-%d of %d"
|
||||
msgstr ""
|
||||
msgstr "%d-%d of %d"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -545,7 +545,7 @@ msgstr "Aanmaken en Bewerken..."
|
||||
#: code:addons/web/static/src/js/pyeval.js:731
|
||||
#, python-format
|
||||
msgid "Unknown nonliteral type "
|
||||
msgstr ""
|
||||
msgstr "Onbekend nonliteral type "
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -573,7 +573,7 @@ msgstr "Afdrukken Workflow"
|
||||
#: code:addons/web/static/src/js/chrome.js:396
|
||||
#, python-format
|
||||
msgid "Please confirm your new password"
|
||||
msgstr ""
|
||||
msgstr "Bevestig uw wachtwoord"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -622,7 +622,7 @@ msgstr "Model %s velden"
|
||||
#: code:addons/web/static/src/js/view_list.js:890
|
||||
#, python-format
|
||||
msgid "Setting 'id' attribute on existing record %s"
|
||||
msgstr ""
|
||||
msgstr "Instellen van 'id' attribute op bestaand record %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -667,6 +667,8 @@ msgstr "Action ID:"
|
||||
#, python-format
|
||||
msgid "Your user's preference timezone does not match your browser timezone:"
|
||||
msgstr ""
|
||||
"De tijdzone in uw gebruikersvoorkeuren komt niet overheen met de tijdzone "
|
||||
"van uw browser:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -674,6 +676,7 @@ msgstr ""
|
||||
#, python-format
|
||||
msgid "Field '%s' specified in view could not be found."
|
||||
msgstr ""
|
||||
"Veld '%s' welke in de weergave is gespecificeerd kon niet worden gevonden."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -701,7 +704,7 @@ msgstr "Bytes,Kb,Mb,Gb,Tb,Pb,Eb,Zb,Yb"
|
||||
#: code:addons/web/static/src/js/chrome.js:481
|
||||
#, python-format
|
||||
msgid "The database has been duplicated."
|
||||
msgstr ""
|
||||
msgstr "De database is gedupliceerd."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -793,7 +796,7 @@ msgstr "Veldscheidingsteken:"
|
||||
#: code:addons/web/static/src/xml/base.xml:458
|
||||
#, python-format
|
||||
msgid "Browser's timezone"
|
||||
msgstr ""
|
||||
msgstr "Tijdzone van de browser"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -859,7 +862,7 @@ msgstr "Voorkeuren"
|
||||
#: code:addons/web/static/src/js/view_form.js:434
|
||||
#, python-format
|
||||
msgid "Wrong on change format: %s"
|
||||
msgstr ""
|
||||
msgstr "Fout bij het wijzigen van het formaat: %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -874,7 +877,7 @@ msgstr "Verwijder Database"
|
||||
#: code:addons/web/static/src/xml/base.xml:462
|
||||
#, python-format
|
||||
msgid "Click here to change your user's timezone."
|
||||
msgstr ""
|
||||
msgstr "Klik hier om uw tijdzone te wijzigen."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -920,21 +923,21 @@ msgstr "Gebruikersnaam"
|
||||
#: code:addons/web/static/src/js/chrome.js:481
|
||||
#, python-format
|
||||
msgid "Duplicating database"
|
||||
msgstr ""
|
||||
msgstr "Dupliceer database"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:563
|
||||
#, python-format
|
||||
msgid "Password has been changed successfully"
|
||||
msgstr ""
|
||||
msgstr "Uw wachtwoord is succesvol gewijzigd."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_list_editable.js:781
|
||||
#, python-format
|
||||
msgid "The form's data can not be discarded"
|
||||
msgstr ""
|
||||
msgstr "De gegevens van het formulier kunnen niet worden verwijderd."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -969,6 +972,10 @@ msgid ""
|
||||
"\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
"Locale evaluatie fout\n"
|
||||
"%s\n"
|
||||
"\n"
|
||||
"%s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1003,7 +1010,7 @@ msgstr "Aanmaakdatum:"
|
||||
#: code:addons/web/controllers/main.py:851
|
||||
#, python-format
|
||||
msgid "Error, password not changed !"
|
||||
msgstr ""
|
||||
msgstr "Fout, uw wachtwoord is niet gewijzigd!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1026,7 +1033,7 @@ msgstr "/web/binary/upload_attachment"
|
||||
#: code:addons/web/static/src/js/chrome.js:563
|
||||
#, python-format
|
||||
msgid "Changed Password"
|
||||
msgstr ""
|
||||
msgstr "Wachtwoord gewijzigd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1060,14 +1067,14 @@ msgstr "Backup"
|
||||
#: code:addons/web/static/src/js/dates.js:80
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid time"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen geldige tijd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/formats.js:274
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct date"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen correcte datum"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1121,7 +1128,7 @@ msgstr "Laatst aangepast door:"
|
||||
#: code:addons/web/static/src/xml/base.xml:466
|
||||
#, python-format
|
||||
msgid "Timezone mismatch"
|
||||
msgstr ""
|
||||
msgstr "Tijdzone fout"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1189,7 +1196,7 @@ msgstr "Geavanceerd filter toevoegen"
|
||||
#: code:addons/web/controllers/main.py:844
|
||||
#, python-format
|
||||
msgid "The new password and its confirmation must be identical."
|
||||
msgstr ""
|
||||
msgstr "Het nieuwe wachtwoord en haar bevestiging moeten identiek zijn."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1204,7 +1211,7 @@ msgstr "Herstel database"
|
||||
#: code:addons/web/static/src/js/chrome.js:645
|
||||
#, python-format
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
msgstr "Inloggen"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1247,7 +1254,7 @@ msgstr "Groepeer op: %s"
|
||||
#: code:addons/web/static/src/js/view_form.js:151
|
||||
#, python-format
|
||||
msgid "No data provided."
|
||||
msgstr ""
|
||||
msgstr "Geen gegevens ingevoerd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1318,7 +1325,7 @@ msgstr "%(page)d/%(page_count)d"
|
||||
#: code:addons/web/static/src/js/chrome.js:397
|
||||
#, python-format
|
||||
msgid "The confirmation does not match the password"
|
||||
msgstr ""
|
||||
msgstr "De bevestiging komt niet overeen met het wachtwoord"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1357,7 +1364,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:393
|
||||
#, python-format
|
||||
msgid "99+"
|
||||
msgstr ""
|
||||
msgstr "99+"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1371,7 +1378,7 @@ msgstr "1. Importeer een .CSV bestand"
|
||||
#: code:addons/web/static/src/js/chrome.js:645
|
||||
#, python-format
|
||||
msgid "No database selected !"
|
||||
msgstr ""
|
||||
msgstr "Geen database geselecteerd!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1409,7 +1416,7 @@ msgstr "is gelijk aan"
|
||||
#: code:addons/web/static/src/js/views.js:1455
|
||||
#, python-format
|
||||
msgid "Could not serialize XML"
|
||||
msgstr ""
|
||||
msgstr "Could not serialize XML"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1516,14 +1523,14 @@ msgstr "Boomstructuur"
|
||||
#: code:addons/web/controllers/main.py:766
|
||||
#, python-format
|
||||
msgid "Could not drop database !"
|
||||
msgstr ""
|
||||
msgstr "De database kon niet worden verwijderd!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/formats.js:227
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct integer"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen correct geheel getal (integer)"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1544,7 +1551,7 @@ msgstr "Onbekend veld %s in domein %s"
|
||||
#: code:addons/web/static/src/js/views.js:1421
|
||||
#, python-format
|
||||
msgid "Node [%s] is not a JSONified XML node"
|
||||
msgstr ""
|
||||
msgstr "Node [%s] is geen JSONified XML node"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1558,7 +1565,7 @@ msgstr "Geavanceerd zoeken..."
|
||||
#: code:addons/web/static/src/js/chrome.js:499
|
||||
#, python-format
|
||||
msgid "Dropping database"
|
||||
msgstr ""
|
||||
msgstr "Database verwijderen"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1623,7 +1630,7 @@ msgstr "%d jaar geleden"
|
||||
#: code:addons/web/static/src/js/view_list.js:1019
|
||||
#, python-format
|
||||
msgid "Unknown m2m command %s"
|
||||
msgstr ""
|
||||
msgstr "Onbekend m2m commando %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1646,14 +1653,14 @@ msgstr "Naam nieuwe database:"
|
||||
#: code:addons/web/static/src/js/chrome.js:394
|
||||
#, python-format
|
||||
msgid "Please enter your new password"
|
||||
msgstr ""
|
||||
msgstr "Vul uw nieuwe wachtwoord in"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/views.js:1463
|
||||
#, python-format
|
||||
msgid "Could not parse string to xml"
|
||||
msgstr ""
|
||||
msgstr "Could not parse string to xml"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1760,7 +1767,7 @@ msgstr "Weergeven velden"
|
||||
#: code:addons/web/static/src/xml/base.xml:330
|
||||
#, python-format
|
||||
msgid "Confirm New Password:"
|
||||
msgstr ""
|
||||
msgstr "Bevestig nieuw wachtwoord"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1932,7 +1939,7 @@ msgstr "Soort:"
|
||||
#: code:addons/web/static/src/js/chrome.js:538
|
||||
#, python-format
|
||||
msgid "Incorrect super-administrator password"
|
||||
msgstr ""
|
||||
msgstr "Het super-administrator wachtwoord is incorrect."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1974,6 +1981,8 @@ msgid ""
|
||||
"The type of the field '%s' must be a many2many field with a relation to "
|
||||
"'ir.attachment' model."
|
||||
msgstr ""
|
||||
"Het type van het veld '%s' moet een many2many veld zijn met een relatie naar "
|
||||
"het 'ir.attachment' model."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2038,14 +2047,14 @@ msgstr "Demonstratiegegevens laden:"
|
||||
#: code:addons/web/static/src/js/dates.js:26
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid datetime"
|
||||
msgstr ""
|
||||
msgstr "'%s' is geen correcte datum/tijd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/views.js:1471
|
||||
#, python-format
|
||||
msgid "Could not find a DOM Parser: %s"
|
||||
msgstr ""
|
||||
msgstr "Kon geen DOM Parser: %s vinden"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2125,14 +2134,14 @@ msgstr "Download \"%s\""
|
||||
#: code:addons/web/static/src/js/view_form.js:324
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
msgstr "Nieuw"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_list.js:1746
|
||||
#, python-format
|
||||
msgid "Can't convert value %s to context"
|
||||
msgstr ""
|
||||
msgstr "Niet mogelijk om de waarde %s te converteren."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2205,13 +2214,13 @@ msgstr "Over OpenERP"
|
||||
#: code:addons/web/static/src/js/formats.js:297
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct date, datetime nor time"
|
||||
msgstr ""
|
||||
msgstr "'%s' is is geen correcte datum, datum/tijd of tijd."
|
||||
|
||||
#. module: web
|
||||
#: code:addons/web/controllers/main.py:1306
|
||||
#, python-format
|
||||
msgid "No content found for field '%s' on '%s:%s'"
|
||||
msgstr ""
|
||||
msgstr "Geen inhoud gevonden voor veld '%s' bij '%s:%s'"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2239,7 +2248,7 @@ msgstr "Beheer administraties"
|
||||
#: code:addons/web/static/src/js/pyeval.js:765
|
||||
#, python-format
|
||||
msgid "Evaluation Error"
|
||||
msgstr ""
|
||||
msgstr "Evaluatie fout"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2273,6 +2282,7 @@ msgstr "Nee"
|
||||
#, python-format
|
||||
msgid "'%s' is not convertible to date, datetime nor time"
|
||||
msgstr ""
|
||||
"'%s' is niet converteerbaar naar een datum, een datum/tijd of een tijd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2347,7 +2357,7 @@ msgstr "Het veld is leeg. Er is niets om op te slaan!"
|
||||
#: code:addons/web/static/src/js/view_list.js:1327
|
||||
#, python-format
|
||||
msgid "%s (%d)"
|
||||
msgstr ""
|
||||
msgstr "%s (%d)"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2410,7 +2420,7 @@ msgstr "Weet u zeker dat u deze bijlage wilt verwijderen?"
|
||||
#: code:addons/web/static/src/js/views.js:838
|
||||
#, python-format
|
||||
msgid "Technical Translation"
|
||||
msgstr ""
|
||||
msgstr "Technische vertaling"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2424,14 +2434,14 @@ msgstr "Veld:"
|
||||
#: code:addons/web/static/src/js/chrome.js:499
|
||||
#, python-format
|
||||
msgid "The database %s has been dropped"
|
||||
msgstr ""
|
||||
msgstr "Database %s is verwijderd"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:456
|
||||
#, python-format
|
||||
msgid "User's timezone"
|
||||
msgstr ""
|
||||
msgstr "Gebruikers tijdzone"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2461,6 +2471,8 @@ msgstr "Special:"
|
||||
msgid ""
|
||||
"The old password you provided is incorrect, your password was not changed."
|
||||
msgstr ""
|
||||
"Het oude wachtwoord wat u heft ingevoerd is niet correct. Uw wachtwoord is "
|
||||
"niet gewijzigd."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
+27
-27
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-02-07 20:51+0000\n"
|
||||
"Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) <grzegorz@openglobe.pl>\n"
|
||||
"PO-Revision-Date: 2012-12-09 20:29+0000\n"
|
||||
"Last-Translator: Rafał Perczyński <rafal@pery.com.pl>\n"
|
||||
"Language-Team: Polish <pl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -29,14 +29,14 @@ msgstr "Domyślny język:"
|
||||
#: code:addons/web/static/src/js/coresetup.js:593
|
||||
#, python-format
|
||||
msgid "%d minutes ago"
|
||||
msgstr ""
|
||||
msgstr "%d minut temu"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/coresetup.js:621
|
||||
#, python-format
|
||||
msgid "Still loading...<br />Please be patient."
|
||||
msgstr ""
|
||||
msgstr "Trwa ładowanie...<br />Bądź cierpliwy."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -59,7 +59,7 @@ msgstr "równe lub mniejsze niż"
|
||||
#: code:addons/web/static/src/js/chrome.js:393
|
||||
#, python-format
|
||||
msgid "Please enter your previous password"
|
||||
msgstr ""
|
||||
msgstr "Wpisz twoje poprzednie hasło"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -68,21 +68,21 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:282
|
||||
#, python-format
|
||||
msgid "Master password:"
|
||||
msgstr "Hasło madrzędne:"
|
||||
msgstr "Hasło nadrzędne"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:274
|
||||
#, python-format
|
||||
msgid "Change Master Password"
|
||||
msgstr ""
|
||||
msgstr "Zmień Hasło Główne"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:491
|
||||
#, python-format
|
||||
msgid "Do you really want to delete the database: %s ?"
|
||||
msgstr ""
|
||||
msgstr "Jesteś pewny że chcesz usunąć bazę danych: %s ?"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -96,14 +96,14 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/chrome.js:537
|
||||
#, python-format
|
||||
msgid "Access Denied"
|
||||
msgstr ""
|
||||
msgstr "Odmowa dostępu"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/coresetup.js:594
|
||||
#, python-format
|
||||
msgid "about an hour ago"
|
||||
msgstr ""
|
||||
msgstr "około godziny temu"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -112,7 +112,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/xml/base.xml:216
|
||||
#, python-format
|
||||
msgid "Backup Database"
|
||||
msgstr ""
|
||||
msgstr "Kopia zapasowa bazy danych"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -120,7 +120,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/dates.js:53
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid date"
|
||||
msgstr ""
|
||||
msgstr "'%s' nie jest poprawną datą"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -134,20 +134,20 @@ msgstr "Oto podgląd pliku, którego nie można zaimportować:"
|
||||
#: code:addons/web/static/src/js/coresetup.js:592
|
||||
#, python-format
|
||||
msgid "about a minute ago"
|
||||
msgstr ""
|
||||
msgstr "około minuty temu"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:1272
|
||||
#, python-format
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
msgstr "Plik"
|
||||
|
||||
#. module: web
|
||||
#: code:addons/web/controllers/main.py:842
|
||||
#, python-format
|
||||
msgid "You cannot leave any password empty."
|
||||
msgstr ""
|
||||
msgstr "hasło nie może być puste"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -235,7 +235,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/formats.js:282
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct time"
|
||||
msgstr ""
|
||||
msgstr "'%s' nie jest poprawnym czasem"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -270,21 +270,21 @@ msgstr "Niezdefiniowany"
|
||||
#: code:addons/web/static/src/js/view_form.js:4831
|
||||
#, python-format
|
||||
msgid "File Upload"
|
||||
msgstr ""
|
||||
msgstr "Wyślij plik"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/coresetup.js:598
|
||||
#, python-format
|
||||
msgid "about a month ago"
|
||||
msgstr ""
|
||||
msgstr "około miesiąca temu"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:1575
|
||||
#, python-format
|
||||
msgid "Custom Filters"
|
||||
msgstr ""
|
||||
msgstr "Własne filtry"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -305,14 +305,14 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/search.js:1555
|
||||
#, python-format
|
||||
msgid "Custom Filter"
|
||||
msgstr ""
|
||||
msgstr "Własny filtr"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:159
|
||||
#, python-format
|
||||
msgid "Duplicate Database"
|
||||
msgstr ""
|
||||
msgstr "Duplikuj bazę danych"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -349,14 +349,14 @@ msgstr "Pobierz"
|
||||
#: code:addons/web/static/src/js/formats.js:266
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct datetime"
|
||||
msgstr ""
|
||||
msgstr "'%s' nie jest poprawną datą"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_list.js:415
|
||||
#, python-format
|
||||
msgid "Group"
|
||||
msgstr ""
|
||||
msgstr "Grupa"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -383,7 +383,7 @@ msgstr ""
|
||||
#: code:addons/web/controllers/main.py:863
|
||||
#, python-format
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
msgstr "Języki"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -411,7 +411,7 @@ msgstr ""
|
||||
#: code:addons/web/static/src/js/view_form.js:4811
|
||||
#, python-format
|
||||
msgid "File upload"
|
||||
msgstr ""
|
||||
msgstr "Wysyłanie pliku"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
+169
-157
File diff suppressed because it is too large
Load Diff
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-12-03 19:25+0000\n"
|
||||
"Last-Translator: Cristiano Korndörfer <codigo.aberto@dorfer.com.br>\n"
|
||||
"PO-Revision-Date: 2012-12-07 21:03+0000\n"
|
||||
"Last-Translator: Luiz Fernando M.França (Sig Informática) <Unknown>\n"
|
||||
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-04 05:59+0000\n"
|
||||
"X-Generator: Launchpad (build 16335)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -860,7 +860,7 @@ msgstr "Preferências"
|
||||
#: code:addons/web/static/src/js/view_form.js:434
|
||||
#, python-format
|
||||
msgid "Wrong on change format: %s"
|
||||
msgstr ""
|
||||
msgstr "Formato invalido para on change: %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,28 +8,28 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-03-15 08:11+0000\n"
|
||||
"Last-Translator: angelescu <Unknown>\n"
|
||||
"PO-Revision-Date: 2012-12-09 17:26+0000\n"
|
||||
"Last-Translator: Fekete Mihai <mihai@erpsystems.ro>\n"
|
||||
"Language-Team: Romanian <ro@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:133
|
||||
#, python-format
|
||||
msgid "Default language:"
|
||||
msgstr "Limba implicita:"
|
||||
msgstr "Limba implicită:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/coresetup.js:593
|
||||
#, python-format
|
||||
msgid "%d minutes ago"
|
||||
msgstr ""
|
||||
msgstr "acum %d minute"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
+58
-52
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-27 12:33+0000\n"
|
||||
"Last-Translator: Chertykov Denis <chertykov@gmail.com>\n"
|
||||
"PO-Revision-Date: 2012-12-05 11:06+0000\n"
|
||||
"Last-Translator: Denis Karataev <dskarataev@gmail.com>\n"
|
||||
"Language-Team: Russian <ru@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:20+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-06 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -59,7 +59,7 @@ msgstr "меньше или равен"
|
||||
#: code:addons/web/static/src/js/chrome.js:393
|
||||
#, python-format
|
||||
msgid "Please enter your previous password"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста введите ваш предыдущий пароль"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -82,7 +82,7 @@ msgstr "Изменить главный пароль"
|
||||
#: code:addons/web/static/src/js/chrome.js:491
|
||||
#, python-format
|
||||
msgid "Do you really want to delete the database: %s ?"
|
||||
msgstr ""
|
||||
msgstr "Вы действительно хотите удалить базу данных: %s?"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -96,7 +96,7 @@ msgstr "Искать %(field)s в: %(value)s"
|
||||
#: code:addons/web/static/src/js/chrome.js:537
|
||||
#, python-format
|
||||
msgid "Access Denied"
|
||||
msgstr ""
|
||||
msgstr "Доступ запрещен"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -120,7 +120,7 @@ msgstr "Резервное копирование базы данных"
|
||||
#: code:addons/web/static/src/js/dates.js:53
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid date"
|
||||
msgstr ""
|
||||
msgstr "%s не является допустимой датой"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -147,7 +147,7 @@ msgstr "Файл"
|
||||
#: code:addons/web/controllers/main.py:842
|
||||
#, python-format
|
||||
msgid "You cannot leave any password empty."
|
||||
msgstr ""
|
||||
msgstr "Вы не можете оставить пароль пустым."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -237,7 +237,7 @@ msgstr "(нет строки)"
|
||||
#: code:addons/web/static/src/js/formats.js:282
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct time"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является корректным временем"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -336,7 +336,7 @@ msgstr "Изменить пароль"
|
||||
#: code:addons/web/static/src/js/view_form.js:3382
|
||||
#, python-format
|
||||
msgid "View type '%s' is not supported in One2Many."
|
||||
msgstr ""
|
||||
msgstr "Тип вида '%s' не поддерживается в one2many"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -351,7 +351,7 @@ msgstr "Загрузить"
|
||||
#: code:addons/web/static/src/js/formats.js:266
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct datetime"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является корректной датой и временем"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -379,13 +379,13 @@ msgstr "Выбор:"
|
||||
#: code:addons/web/static/src/js/view_form.js:869
|
||||
#, python-format
|
||||
msgid "The following fields are invalid:"
|
||||
msgstr ""
|
||||
msgstr "Следующие поля заполнены неверны:"
|
||||
|
||||
#. module: web
|
||||
#: code:addons/web/controllers/main.py:863
|
||||
#, python-format
|
||||
msgid "Languages"
|
||||
msgstr ""
|
||||
msgstr "Языки"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -406,7 +406,7 @@ msgstr "Импорт"
|
||||
#: code:addons/web/static/src/js/chrome.js:543
|
||||
#, python-format
|
||||
msgid "Could not restore the database"
|
||||
msgstr ""
|
||||
msgstr "Невозможно восстановить базу данных"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -520,7 +520,7 @@ msgstr "Неподдерживаемый оператор %s в домене %s"
|
||||
#: code:addons/web/static/src/js/formats.js:242
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct float"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является корректным числом с плавающей точкой"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -576,7 +576,7 @@ msgstr "Печать рабочего процесса"
|
||||
#: code:addons/web/static/src/js/chrome.js:396
|
||||
#, python-format
|
||||
msgid "Please confirm your new password"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста подтвердите ваш новый пароль"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -670,13 +670,15 @@ msgstr "ID действия:"
|
||||
#, python-format
|
||||
msgid "Your user's preference timezone does not match your browser timezone:"
|
||||
msgstr ""
|
||||
"Часовой пояс в ваших настройках пользователя не совпадает с часовым поясом "
|
||||
"вашего браузера:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_form.js:1238
|
||||
#, python-format
|
||||
msgid "Field '%s' specified in view could not be found."
|
||||
msgstr ""
|
||||
msgstr "Поле '%s' указанное в виде не может быть найдено."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -704,7 +706,7 @@ msgstr "Байты,Кб,Мб,Гб,Тб,Пб,Eb,Zb,Yb"
|
||||
#: code:addons/web/static/src/js/chrome.js:481
|
||||
#, python-format
|
||||
msgid "The database has been duplicated."
|
||||
msgstr ""
|
||||
msgstr "База данных была скопирована."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -795,7 +797,7 @@ msgstr "Разделитель:"
|
||||
#: code:addons/web/static/src/xml/base.xml:458
|
||||
#, python-format
|
||||
msgid "Browser's timezone"
|
||||
msgstr ""
|
||||
msgstr "Часовой пояс браузера"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -861,7 +863,7 @@ msgstr "Настройки"
|
||||
#: code:addons/web/static/src/js/view_form.js:434
|
||||
#, python-format
|
||||
msgid "Wrong on change format: %s"
|
||||
msgstr ""
|
||||
msgstr "Неправильный или измененный формат: %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -876,7 +878,7 @@ msgstr "Удалить базу данных"
|
||||
#: code:addons/web/static/src/xml/base.xml:462
|
||||
#, python-format
|
||||
msgid "Click here to change your user's timezone."
|
||||
msgstr ""
|
||||
msgstr "Нажмите здесь для изменения часового пояса вашего пользователя."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -922,21 +924,21 @@ msgstr "Имя пользователя"
|
||||
#: code:addons/web/static/src/js/chrome.js:481
|
||||
#, python-format
|
||||
msgid "Duplicating database"
|
||||
msgstr ""
|
||||
msgstr "Копирование базы данных"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/chrome.js:563
|
||||
#, python-format
|
||||
msgid "Password has been changed successfully"
|
||||
msgstr ""
|
||||
msgstr "Пароль был успешно изменен"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_list_editable.js:781
|
||||
#, python-format
|
||||
msgid "The form's data can not be discarded"
|
||||
msgstr ""
|
||||
msgstr "Информация формы не может быть отклонена"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1005,7 +1007,7 @@ msgstr "Дата создания:"
|
||||
#: code:addons/web/controllers/main.py:851
|
||||
#, python-format
|
||||
msgid "Error, password not changed !"
|
||||
msgstr ""
|
||||
msgstr "Ошибка, пароль не изменен!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1027,7 +1029,7 @@ msgstr "/web/binary/upload_attachment"
|
||||
#: code:addons/web/static/src/js/chrome.js:563
|
||||
#, python-format
|
||||
msgid "Changed Password"
|
||||
msgstr ""
|
||||
msgstr "Измененный пароль"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1061,14 +1063,14 @@ msgstr "Резервная копия"
|
||||
#: code:addons/web/static/src/js/dates.js:80
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid time"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является допустимым временем"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/formats.js:274
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct date"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является корректной датой"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1122,7 +1124,7 @@ msgstr "Изменялся:"
|
||||
#: code:addons/web/static/src/xml/base.xml:466
|
||||
#, python-format
|
||||
msgid "Timezone mismatch"
|
||||
msgstr ""
|
||||
msgstr "Несовпадение часовых поясов"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1190,7 +1192,7 @@ msgstr "Добавить расширенный фильтр"
|
||||
#: code:addons/web/controllers/main.py:844
|
||||
#, python-format
|
||||
msgid "The new password and its confirmation must be identical."
|
||||
msgstr ""
|
||||
msgstr "Новый пароль и его подтверждение должны быть идентичны."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1205,7 +1207,7 @@ msgstr "Восстановить базу данных"
|
||||
#: code:addons/web/static/src/js/chrome.js:645
|
||||
#, python-format
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
msgstr "Войти"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1248,7 +1250,7 @@ msgstr "Группировать по: %s"
|
||||
#: code:addons/web/static/src/js/view_form.js:151
|
||||
#, python-format
|
||||
msgid "No data provided."
|
||||
msgstr ""
|
||||
msgstr "Нет предоставленных данных."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1319,7 +1321,7 @@ msgstr "%(page)d/%(page_count)d"
|
||||
#: code:addons/web/static/src/js/chrome.js:397
|
||||
#, python-format
|
||||
msgid "The confirmation does not match the password"
|
||||
msgstr ""
|
||||
msgstr "Подтверждение должно совпадать с паролем"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1372,7 +1374,7 @@ msgstr "1. Импорт из .CSV файла"
|
||||
#: code:addons/web/static/src/js/chrome.js:645
|
||||
#, python-format
|
||||
msgid "No database selected !"
|
||||
msgstr ""
|
||||
msgstr "Не выбрана база данных!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1410,7 +1412,7 @@ msgstr "соответствует"
|
||||
#: code:addons/web/static/src/js/views.js:1455
|
||||
#, python-format
|
||||
msgid "Could not serialize XML"
|
||||
msgstr ""
|
||||
msgstr "Невозможно сериализовать XML"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1517,14 +1519,14 @@ msgstr "Дерево"
|
||||
#: code:addons/web/controllers/main.py:766
|
||||
#, python-format
|
||||
msgid "Could not drop database !"
|
||||
msgstr ""
|
||||
msgstr "Невозможно удалить базу данных!"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/formats.js:227
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct integer"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является корректным целым числом"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1559,7 +1561,7 @@ msgstr "Расширенный поиск..."
|
||||
#: code:addons/web/static/src/js/chrome.js:499
|
||||
#, python-format
|
||||
msgid "Dropping database"
|
||||
msgstr ""
|
||||
msgstr "Удаление базы данных"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1624,7 +1626,7 @@ msgstr "%d лет назад"
|
||||
#: code:addons/web/static/src/js/view_list.js:1019
|
||||
#, python-format
|
||||
msgid "Unknown m2m command %s"
|
||||
msgstr ""
|
||||
msgstr "Неизвестная m2m команда %s"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1647,14 +1649,14 @@ msgstr "Название новой базы данных:"
|
||||
#: code:addons/web/static/src/js/chrome.js:394
|
||||
#, python-format
|
||||
msgid "Please enter your new password"
|
||||
msgstr ""
|
||||
msgstr "Пожалуйста введите ваш новый пароль"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/views.js:1463
|
||||
#, python-format
|
||||
msgid "Could not parse string to xml"
|
||||
msgstr ""
|
||||
msgstr "Невозможно преобразовать строку в XML"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1761,7 +1763,7 @@ msgstr "Просмотр полей"
|
||||
#: code:addons/web/static/src/xml/base.xml:330
|
||||
#, python-format
|
||||
msgid "Confirm New Password:"
|
||||
msgstr ""
|
||||
msgstr "Подтвердите новый пароль:"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1932,7 +1934,7 @@ msgstr "Тип:"
|
||||
#: code:addons/web/static/src/js/chrome.js:538
|
||||
#, python-format
|
||||
msgid "Incorrect super-administrator password"
|
||||
msgstr ""
|
||||
msgstr "Неправильный пароль супер-администратора"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -1974,6 +1976,7 @@ msgid ""
|
||||
"The type of the field '%s' must be a many2many field with a relation to "
|
||||
"'ir.attachment' model."
|
||||
msgstr ""
|
||||
"Тип поля '%s' должен быть many2many и иметь связь с моделью 'ir.attachment'."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2038,7 +2041,7 @@ msgstr "Загрузить демонстрационные данные:"
|
||||
#: code:addons/web/static/src/js/dates.js:26
|
||||
#, python-format
|
||||
msgid "'%s' is not a valid datetime"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является допустимой датой и временем"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2125,14 +2128,14 @@ msgstr "Загрузка \"%s\""
|
||||
#: code:addons/web/static/src/js/view_form.js:324
|
||||
#, python-format
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
msgstr "Новый"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/js/view_list.js:1746
|
||||
#, python-format
|
||||
msgid "Can't convert value %s to context"
|
||||
msgstr ""
|
||||
msgstr "Невозможно конвертировать значение %s в контекст"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2206,12 +2209,14 @@ msgstr "Об OpenERP"
|
||||
#, python-format
|
||||
msgid "'%s' is not a correct date, datetime nor time"
|
||||
msgstr ""
|
||||
"'%s' не является ни корректной датой, ни временем, ни тем и другим вместе "
|
||||
"взятым."
|
||||
|
||||
#. module: web
|
||||
#: code:addons/web/controllers/main.py:1306
|
||||
#, python-format
|
||||
msgid "No content found for field '%s' on '%s:%s'"
|
||||
msgstr ""
|
||||
msgstr "Не найдено содержимое для поля '%s' на '%s:%s'"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2272,7 +2277,7 @@ msgstr "Нет"
|
||||
#: code:addons/web/static/src/js/formats.js:309
|
||||
#, python-format
|
||||
msgid "'%s' is not convertible to date, datetime nor time"
|
||||
msgstr ""
|
||||
msgstr "'%s' не является конвертируемым в дату, время или дату и время"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2410,7 +2415,7 @@ msgstr "Вы действительно хотите удалить это вл
|
||||
#: code:addons/web/static/src/js/views.js:838
|
||||
#, python-format
|
||||
msgid "Technical Translation"
|
||||
msgstr ""
|
||||
msgstr "Технический перевод"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2424,14 +2429,14 @@ msgstr "Поле:"
|
||||
#: code:addons/web/static/src/js/chrome.js:499
|
||||
#, python-format
|
||||
msgid "The database %s has been dropped"
|
||||
msgstr ""
|
||||
msgstr "База данных %s была удалена"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
#: code:addons/web/static/src/xml/base.xml:456
|
||||
#, python-format
|
||||
msgid "User's timezone"
|
||||
msgstr ""
|
||||
msgstr "Часовой пояс пользователя"
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
@@ -2461,6 +2466,7 @@ msgstr "Специальное:"
|
||||
msgid ""
|
||||
"The old password you provided is incorrect, your password was not changed."
|
||||
msgstr ""
|
||||
"Старый пароль который вы предоставили неверен, ваш пароль не был изменен."
|
||||
|
||||
#. module: web
|
||||
#. openerp-web
|
||||
|
||||
@@ -8952,7 +8952,7 @@ $.extend( $.ui.dialog.overlay, {
|
||||
$( document ).bind( $.ui.dialog.overlay.events, function( event ) {
|
||||
// stop events if the z-index of the target is < the z-index of the overlay
|
||||
// we cannot return true when we don't want to cancel the event (#3523)
|
||||
if ( $( event.target ).zIndex() < $.ui.dialog.overlay.maxZ ) {
|
||||
if ( $(event.target).closest('.ui-dialog').zIndex() < $.ui.dialog.overlay.maxZ ) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -228,6 +228,7 @@ QWeb2.Engine = (function() {
|
||||
}
|
||||
if (name) {
|
||||
this.templates[name] = node;
|
||||
this.compiled_templates[name] = null;
|
||||
} else if (extend) {
|
||||
delete(this.compiled_templates[extend]);
|
||||
if (this.extend_templates[extend]) {
|
||||
|
||||
@@ -1106,7 +1106,6 @@ instance.web.WebClient = instance.web.Client.extend({
|
||||
start: function() {
|
||||
var self = this;
|
||||
return $.when(this._super()).then(function() {
|
||||
self.$(".oe_logo").attr("href", $.param.fragment("" + window.location, "", 2).slice(0, -1));
|
||||
if (jQuery.param !== undefined && jQuery.deparam(jQuery.param.querystring()).kitten !== undefined) {
|
||||
$("body").addClass("kitten-mode-activated");
|
||||
if ($.blockUI) {
|
||||
|
||||
@@ -341,12 +341,10 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
|
||||
if (this.headless) {
|
||||
this.ready.resolve();
|
||||
} else {
|
||||
var load_view = this.rpc("/web/view/load", {
|
||||
model: this.model,
|
||||
var load_view = instance.web.fields_view_get({
|
||||
model: this.dataset._model,
|
||||
view_id: this.view_id,
|
||||
view_type: 'search',
|
||||
context: instance.web.pyeval.eval(
|
||||
'context', this.dataset.get_context())
|
||||
});
|
||||
|
||||
$.when(load_view).then(function (r) {
|
||||
|
||||
@@ -10,7 +10,7 @@ openerp.testing = {};
|
||||
formats: ['coresetup', 'dates'],
|
||||
chrome: ['corelib', 'coresetup'],
|
||||
views: ['corelib', 'coresetup', 'data', 'chrome'],
|
||||
search: ['data', 'coresetup', 'formats'],
|
||||
search: ['views', 'formats'],
|
||||
list: ['views', 'data'],
|
||||
form: ['data', 'views', 'list', 'formats'],
|
||||
list_editable: ['list', 'form', 'data'],
|
||||
|
||||
@@ -1189,36 +1189,19 @@ instance.web.form.FormRenderingEngine = instance.web.form.FormRenderingEngineInt
|
||||
});
|
||||
}
|
||||
},
|
||||
view_arch_to_dom_node: function(arch) {
|
||||
// Historic mess for views arch
|
||||
//
|
||||
// server:
|
||||
// -> got xml as string
|
||||
// -> parse to xml and manipulate domains and contexts
|
||||
// -> convert to json
|
||||
// client:
|
||||
// -> got view as json
|
||||
// -> convert back to xml as string
|
||||
// -> parse it as xml doc (manipulate button@type for IE)
|
||||
// -> convert back to string
|
||||
// -> parse it as dom element with jquery
|
||||
// -> for each widget, convert node to json
|
||||
//
|
||||
// Wow !!!
|
||||
var xml = instance.web.json_node_to_xml(arch);
|
||||
|
||||
var doc = $.parseXML('<div class="oe_form">' + xml + '</div>');
|
||||
get_arch_fragment: function() {
|
||||
var doc = $.parseXML(instance.web.json_node_to_xml(this.fvg.arch)).documentElement;
|
||||
// IE won't allow custom button@type and will revert it to spec default : 'submit'
|
||||
$('button', doc).each(function() {
|
||||
$(this).attr('data-button-type', $(this).attr('type')).attr('type', 'button');
|
||||
});
|
||||
xml = instance.web.xml_to_str(doc);
|
||||
return $(xml);
|
||||
return $('<div class="oe_form"/>').append(instance.web.xml_to_str(doc));
|
||||
},
|
||||
render_to: function($target) {
|
||||
var self = this;
|
||||
this.$target = $target;
|
||||
|
||||
this.$form = this.view_arch_to_dom_node(this.fvg.arch);
|
||||
this.$form = this.get_arch_fragment();
|
||||
|
||||
this.process_version();
|
||||
|
||||
@@ -2680,13 +2663,10 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan
|
||||
init: function(field_manager, node) {
|
||||
var self = this;
|
||||
this._super(field_manager, node);
|
||||
this.values = _.clone(this.field.selection);
|
||||
_.each(this.values, function(v, i) {
|
||||
if (v[0] === false && v[1] === '') {
|
||||
self.values.splice(i, 1);
|
||||
}
|
||||
});
|
||||
this.values.unshift([false, '']);
|
||||
this.values = _(this.field.selection).chain()
|
||||
.reject(function (v) { return v[0] === false && v[1] === ''; })
|
||||
.unshift([false, ''])
|
||||
.value();
|
||||
},
|
||||
initialize_content: function() {
|
||||
// Flag indicating whether we're in an event chain containing a change
|
||||
|
||||
@@ -952,12 +952,18 @@ instance.web.ListView.List = instance.web.Class.extend( /** @lends instance.web.
|
||||
field = $target.closest('td').data('field'),
|
||||
$row = $target.closest('tr'),
|
||||
record_id = self.row_id($row);
|
||||
|
||||
if ($target.attr('disabled')) {
|
||||
return;
|
||||
}
|
||||
$target.attr('disabled', 'disabled');
|
||||
|
||||
// note: $.data converts data to number if it's composed only
|
||||
// of digits, nice when storing actual numbers, not nice when
|
||||
// storing strings composed only of digits. Force the action
|
||||
// name to be a string
|
||||
$(self).trigger('action', [field.toString(), record_id, function (id) {
|
||||
$target.removeAttr('disabled');
|
||||
return self.reload_record(self.records.get(id));
|
||||
}]);
|
||||
})
|
||||
|
||||
@@ -9,6 +9,7 @@ var QWeb = instance.web.qweb,
|
||||
instance.web.views.add('tree', 'instance.web.TreeView');
|
||||
instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeView# */{
|
||||
display_name: _lt('Tree'),
|
||||
view_type: 'tree',
|
||||
/**
|
||||
* Indicates that this view is not searchable, and thus that no search
|
||||
* view should be displayed (if there is one active).
|
||||
@@ -36,18 +37,9 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
|
||||
this.options = _.extend({}, this.defaults, options || {});
|
||||
|
||||
_.bindAll(this, 'color_for');
|
||||
this.on('view_loaded', this, this.load_tree);
|
||||
},
|
||||
|
||||
start: function () {
|
||||
return this.rpc("/web/treeview/load", {
|
||||
model: this.model,
|
||||
view_id: this.view_id,
|
||||
view_type: "tree",
|
||||
toolbar: this.view_manager ? !!this.view_manager.sidebar : false,
|
||||
context: instance.web.pyeval.eval(
|
||||
'context', this.dataset.get_context())
|
||||
}).done(this.on_loaded);
|
||||
},
|
||||
/**
|
||||
* Returns the list of fields needed to correctly read objects.
|
||||
*
|
||||
@@ -64,7 +56,7 @@ instance.web.TreeView = instance.web.View.extend(/** @lends instance.web.TreeVie
|
||||
}
|
||||
return fields;
|
||||
},
|
||||
on_loaded: function (fields_view) {
|
||||
load_tree: function (fields_view) {
|
||||
var self = this;
|
||||
var has_toolbar = !!fields_view.arch.attrs.toolbar;
|
||||
// field name in OpenERP is kinda stupid: this is the name of the field
|
||||
|
||||
@@ -758,12 +758,6 @@ instance.web.ViewManagerAction = instance.web.ViewManager.extend({
|
||||
dataset.index = 0;
|
||||
}
|
||||
this.dataset = dataset;
|
||||
|
||||
// setup storage for session-wise menu hiding
|
||||
if (this.session.hidden_menutips) {
|
||||
return;
|
||||
}
|
||||
this.session.hidden_menutips = {};
|
||||
},
|
||||
/**
|
||||
* Initializes the ViewManagerAction: sets up the searchview (if the
|
||||
@@ -1204,13 +1198,11 @@ instance.web.View = instance.web.Widget.extend({
|
||||
} else {
|
||||
if (! this.view_type)
|
||||
console.warn("view_type is not defined", this);
|
||||
view_loaded = this.rpc("/web/view/load", {
|
||||
"model": this.dataset.model,
|
||||
view_loaded = instance.web.fields_view_get({
|
||||
"model": this.dataset._model,
|
||||
"view_id": this.view_id,
|
||||
"view_type": this.view_type,
|
||||
toolbar: !!this.options.$sidebar,
|
||||
context: instance.web.pyeval.eval(
|
||||
'context', this.dataset.get_context(context))
|
||||
"toolbar": !!this.options.$sidebar,
|
||||
});
|
||||
}
|
||||
return view_loaded.then(function(r) {
|
||||
@@ -1385,12 +1377,53 @@ instance.web.View = instance.web.Widget.extend({
|
||||
}
|
||||
});
|
||||
|
||||
instance.web.xml_to_json = function(node) {
|
||||
/**
|
||||
* Performs a fields_view_get and apply postprocessing.
|
||||
* return a {$.Deferred} resolved with the fvg
|
||||
*
|
||||
* @param {Object} [args]
|
||||
* @param {String|Object} args.model instance.web.Model instance or string repr of the model
|
||||
* @param {null|Object} args.context context if args.model is a string
|
||||
* @param {null|Number} args.view_id id of the view to be loaded, default view if null
|
||||
* @param {null|String} args.view_type type of view to be loaded if view_id is null
|
||||
* @param {Boolean} [args.toolbar=false] get the toolbar definition
|
||||
*/
|
||||
instance.web.fields_view_get = function(args) {
|
||||
function postprocess(fvg) {
|
||||
var doc = $.parseXML(fvg.arch).documentElement;
|
||||
fvg.arch = instance.web.xml_to_json(doc, (doc.nodeName.toLowerCase() !== 'kanban'));
|
||||
if ('id' in fvg.fields) {
|
||||
// Special case for id's
|
||||
var id_field = fvg.fields['id'];
|
||||
id_field.original_type = id_field.type;
|
||||
id_field.type = 'id';
|
||||
}
|
||||
_.each(fvg.fields, function(field) {
|
||||
_.each(field.views || {}, function(view) {
|
||||
postprocess(view);
|
||||
});
|
||||
});
|
||||
return fvg;
|
||||
}
|
||||
args = _.defaults(args, {
|
||||
toolbar: false,
|
||||
});
|
||||
var model = args.model;
|
||||
if (typeof model === 'string') {
|
||||
model = new instance.web.Model(args.model, args.context);
|
||||
}
|
||||
return args.model.call('fields_view_get', [args.view_id, args.view_type, model.context(), args.toolbar]).then(function(fvg) {
|
||||
return postprocess(fvg);
|
||||
});
|
||||
};
|
||||
|
||||
instance.web.xml_to_json = function(node, strip_whitespace) {
|
||||
switch (node.nodeType) {
|
||||
case 9:
|
||||
return instance.web.xml_to_json(node.documentElement, strip_whitespace);
|
||||
case 3:
|
||||
case 4:
|
||||
return node.data;
|
||||
break;
|
||||
return (strip_whitespace && node.data.trim() === '') ? undefined : node.data;
|
||||
case 1:
|
||||
var attrs = $(node).getAttributes();
|
||||
_.each(['domain', 'filter_domain', 'context', 'default_get'], function(key) {
|
||||
@@ -1403,7 +1436,9 @@ instance.web.xml_to_json = function(node) {
|
||||
return {
|
||||
tag: node.tagName.toLowerCase(),
|
||||
attrs: attrs,
|
||||
children: _.map(node.childNodes, instance.web.xml_to_json)
|
||||
children: _.compact(_.map(node.childNodes, function(node) {
|
||||
return instance.web.xml_to_json(node, strip_whitespace);
|
||||
})),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1455,26 +1490,6 @@ instance.web.xml_to_str = function(node) {
|
||||
throw new Error(_t("Could not serialize XML"));
|
||||
}
|
||||
};
|
||||
instance.web.str_to_xml = function(s) {
|
||||
if (window.DOMParser) {
|
||||
var dp = new DOMParser();
|
||||
var r = dp.parseFromString(s, "text/xml");
|
||||
if (r.body && r.body.firstChild && r.body.firstChild.nodeName == 'parsererror') {
|
||||
throw new Error(_t("Could not parse string to xml"));
|
||||
}
|
||||
return r;
|
||||
}
|
||||
var xDoc;
|
||||
try {
|
||||
xDoc = new ActiveXObject("MSXML2.DOMDocument");
|
||||
} catch (e) {
|
||||
throw new Error(_.str.sprintf( _t("Could not find a DOM Parser: %s"), e.message));
|
||||
}
|
||||
xDoc.async = false;
|
||||
xDoc.preserveWhiteSpace = true;
|
||||
xDoc.loadXML(s);
|
||||
return xDoc;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registry for all the main views
|
||||
|
||||
@@ -436,7 +436,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="oe_leftbar" valign="top">
|
||||
<a class="oe_logo" href="#"><img t-att-src='_s + "/web/static/src/img/logo.png"'/></a>
|
||||
<a class="oe_logo" t-attf-href="/?ts=#{Date.now()}"><img t-att-src='_s + "/web/static/src/img/logo.png"'/></a>
|
||||
<div class="oe_secondary_menus_container"/>
|
||||
<div class="oe_footer">
|
||||
Powered by <a href="http://www.openerp.com" target="_blank"><span>OpenERP</span></a>
|
||||
@@ -1054,7 +1054,10 @@
|
||||
t-att-autofocus="widget.node.attrs.autofocus"
|
||||
t-att-id="widget.id_for_label">
|
||||
<t t-foreach="widget.values" t-as="option">
|
||||
<option><t t-esc="widget.node.attrs.placeholder" t-if="option[0] == false and widget.node.attrs.placeholder"/><t t-esc="option[1]" t-if="option[0] != false"/></option>
|
||||
<option>
|
||||
<t t-esc="widget.node.attrs.placeholder" t-if="option[0] === false and widget.node.attrs.placeholder"/>
|
||||
<t t-esc="option[1]" t-if="option[0] !== false"/>
|
||||
</option>
|
||||
</t>
|
||||
</select>
|
||||
</span>
|
||||
|
||||
@@ -183,7 +183,7 @@ openerp.testing.section('list.edition', {
|
||||
}
|
||||
return [];
|
||||
});
|
||||
mock('/web/view/load', function () {
|
||||
mock('demo:fields_view_get', function () {
|
||||
return {
|
||||
type: 'tree',
|
||||
fields: {
|
||||
@@ -191,15 +191,7 @@ openerp.testing.section('list.edition', {
|
||||
b: {type: 'char', string: "B"},
|
||||
c: {type: 'char', string: "C"}
|
||||
},
|
||||
arch: {
|
||||
tag: 'tree',
|
||||
attrs: {},
|
||||
children: [
|
||||
{tag: 'field', attrs: {name: 'a'}},
|
||||
{tag: 'field', attrs: {name: 'b'}},
|
||||
{tag: 'field', attrs: {name: 'c'}}
|
||||
]
|
||||
}
|
||||
arch: '<tree><field name="a"/><field name="b"/><field name="c"/></tree>',
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -247,7 +239,7 @@ openerp.testing.section('list.edition.events', {
|
||||
mock('demo:read', function () {
|
||||
return [{ id: 1, a: 'foo', b: 'bar', c: 'baz' }];
|
||||
});
|
||||
mock('/web/view/load', function () {
|
||||
mock('demo:fields_view_get', function () {
|
||||
return {
|
||||
type: 'tree',
|
||||
fields: {
|
||||
@@ -255,15 +247,7 @@ openerp.testing.section('list.edition.events', {
|
||||
b: {type: 'char', string: "B"},
|
||||
c: {type: 'char', string: "C"}
|
||||
},
|
||||
arch: {
|
||||
tag: 'tree',
|
||||
attrs: {},
|
||||
children: [
|
||||
{tag: 'field', attrs: {name: 'a'}},
|
||||
{tag: 'field', attrs: {name: 'b'}},
|
||||
{tag: 'field', attrs: {name: 'c'}}
|
||||
]
|
||||
}
|
||||
arch: '<tree><field name="a"/><field name="b"/><field name="c"/></tree>',
|
||||
};
|
||||
});
|
||||
}
|
||||
@@ -320,19 +304,13 @@ openerp.testing.section('list.edition.onwrite', {
|
||||
templates: true,
|
||||
}, function (test) {
|
||||
test('record-to-read', {asserts: 4}, function (instance, $fix, mock) {
|
||||
mock('/web/view/load', function () {
|
||||
mock('demo:fields_view_get', function () {
|
||||
return {
|
||||
type: 'tree',
|
||||
fields: {
|
||||
a: {type: 'char', string: "A"}
|
||||
},
|
||||
arch: {
|
||||
tag: 'tree',
|
||||
attrs: { on_write: 'on_write', colors: 'red:a == "foo"' },
|
||||
children: [
|
||||
{tag: 'field', attrs: {name: 'a'}}
|
||||
]
|
||||
}
|
||||
arch: '<tree on_write="on_write" colors="red:a == \'foo\'"><field name="a"/></tree>',
|
||||
};
|
||||
});
|
||||
mock('demo:read', function (args, kwargs) {
|
||||
|
||||
@@ -4,20 +4,13 @@ openerp.testing.section('list.buttons', {
|
||||
templates: true
|
||||
}, function (test) {
|
||||
test('record-deletion', {asserts: 2}, function (instance, $fix, mock) {
|
||||
mock('/web/view/load', function () {
|
||||
mock('demo:fields_view_get', function () {
|
||||
return {
|
||||
type: 'tree',
|
||||
fields: {
|
||||
a: {type: 'char', string: "A"}
|
||||
},
|
||||
arch: {
|
||||
tag: 'tree',
|
||||
attrs: { },
|
||||
children: [
|
||||
{tag: 'field', attrs: {name: 'a'}},
|
||||
{tag: 'button', attrs: {type: 'object', name: 'foo'}}
|
||||
]
|
||||
}
|
||||
arch: '<tree><field name="a"/><button type="object" name="foo"/></tree>',
|
||||
};
|
||||
});
|
||||
mock('demo:read', function (args, kwargs) {
|
||||
|
||||
@@ -152,25 +152,14 @@ var makeSearchView = function (instance, dummy_widget_attributes, defaults) {
|
||||
instance.dummy = {};
|
||||
instance.dummy.DummyWidget = instance.web.search.Field.extend(
|
||||
dummy_widget_attributes || {});
|
||||
if (!('/web/view/load' in instance.session.responses)) {
|
||||
instance.session.responses['/web/view/load'] = function () {
|
||||
if (!('dummy.model:fields_view_get' in instance.session.responses)) {
|
||||
instance.session.responses['dummy.model:fields_view_get'] = function () {
|
||||
return {
|
||||
type: 'search',
|
||||
fields: {
|
||||
dummy: {type: 'char', string: "Dummy"}
|
||||
},
|
||||
arch: {
|
||||
tag: 'search',
|
||||
attrs: {},
|
||||
children: [{
|
||||
tag: 'field',
|
||||
attrs: {
|
||||
name: 'dummy',
|
||||
widget: 'dummy'
|
||||
},
|
||||
children: []
|
||||
}]
|
||||
}
|
||||
arch: '<search><field name="dummy" widget="dummy"/></search>'
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -183,7 +172,7 @@ var makeSearchView = function (instance, dummy_widget_attributes, defaults) {
|
||||
};
|
||||
};
|
||||
|
||||
var dataset = {model: 'dummy.model', get_context: function () { return {}; }};
|
||||
var dataset = new instance.web.DataSet(null, 'dummy.model');
|
||||
var view = new instance.web.SearchView(null, dataset, false, defaults);
|
||||
var self = this;
|
||||
view.on('invalid_search', self, function () {
|
||||
@@ -926,31 +915,16 @@ openerp.testing.section('filters', {
|
||||
rpc: 'mock',
|
||||
templates: true,
|
||||
setup: function (instance, $s, mock) {
|
||||
mock('/web/view/load', function () {
|
||||
mock('dummy.model:fields_view_get', function () {
|
||||
// view with a single group of filters
|
||||
return {
|
||||
type: 'search',
|
||||
fields: {},
|
||||
arch: {
|
||||
tag: 'search',
|
||||
attrs: {},
|
||||
children: [{
|
||||
tag: 'filter',
|
||||
attrs: { string: "Foo1", domain: [ ['foo', '=', '1'] ] },
|
||||
children: []
|
||||
}, {
|
||||
tag: 'filter',
|
||||
attrs: {
|
||||
name: 'foo2',
|
||||
string: "Foo2",
|
||||
domain: [ ['foo', '=', '2'] ] },
|
||||
children: []
|
||||
}, {
|
||||
tag: 'filter',
|
||||
attrs: { string: "Foo3", domain: [ ['foo', '=', '3'] ] },
|
||||
children: []
|
||||
}]
|
||||
}
|
||||
arch: '<search>' +
|
||||
'<filter string="Foo1" domain="[ [\'foo\', \'=\', \'1\'] ]"/>' +
|
||||
'<filter name="foo2" string="Foo2" domain="[ [\'foo\', \'=\', \'2\'] ]"/>' +
|
||||
'<filter string="Foo3" domain="[ [\'foo\', \'=\', \'3\'] ]"/>' +
|
||||
'</search>',
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
@@ -0,0 +1,116 @@
|
||||
QUnitSuite is a ``unittest.TestSuite`` able to run QUnit_ test suites
|
||||
within the normal unittest process, through PhantomJS_.
|
||||
|
||||
QUnitSuite is built upon `Ben Alman`_'s work of for the interfacing
|
||||
between PhantomJS_ and the host/reporting code: the shims and the
|
||||
PhantomJS_ configuration files are those of grunt_'s ``qunit`` task.
|
||||
|
||||
Why
|
||||
---
|
||||
|
||||
You're a Python shop or developer, you have tools and tests built
|
||||
around unittest (or compatible with unittests) and your testing
|
||||
pipeline is predicated upon that, you're doing web development of some
|
||||
sort these days (as so many are) and you'd like to do some testing of
|
||||
your web stuff.
|
||||
|
||||
But you don't really want to redo your whole testing stack just for
|
||||
that.
|
||||
|
||||
QUnitSuite simply grafts QUnit_-based tests, run in PhantomJS_, in
|
||||
your existing ``unittest``-based architecture.
|
||||
|
||||
What
|
||||
----
|
||||
|
||||
QUnitSuite currently provides a single object as part of its API:
|
||||
``qunitsuite.QUnitSuite(testfile[, timeout])``.
|
||||
|
||||
This produces a ``unittest.TestSuite`` suitable for all the usual
|
||||
stuff (running it, and giving it to an other test suite which will run
|
||||
it, that is).
|
||||
|
||||
``testfile`` is the HTML file bootstrapping your qunit tests, as would
|
||||
usually be accessed via a browser. It can be either a local
|
||||
(``file:``) url, or an HTTP one. As long as a regular browser can open
|
||||
and execute it, PhantomJS_ will manage.
|
||||
|
||||
``timeout`` is a check passed to the PhantomJS_ runner: if the runner
|
||||
produces no information for longer than ``timeout`` milliseconds, the
|
||||
run will be cancelled and a test error will be generated. This
|
||||
situation usually means either your ``testfile`` is not a qunit test
|
||||
file, qunit is not running or qunit's runner was stopped (for an async
|
||||
test) and never restarted.
|
||||
|
||||
The default value is very conservative, most tests should run
|
||||
correctly with lower timeouts (especially if all tests are
|
||||
synchronous).
|
||||
|
||||
How
|
||||
---
|
||||
|
||||
``unittest``'s autodiscovery protocol does not directly work with test
|
||||
suites (it looks for test cases). If you want autodiscovery to work
|
||||
correctly, you will have to use the ``load_tests`` protocol::
|
||||
|
||||
# in a testing module
|
||||
def load_tests(loader, tests, pattern):
|
||||
tests.addTest(QUnitSuite(qunit_test_path.html))
|
||||
return tests
|
||||
|
||||
outside of that specific case, you can use a ``QUnitSuite`` as a
|
||||
standard ``TestSuite`` instance, running it, adding it to an other
|
||||
suite or passing it to a ``TestRunner``
|
||||
|
||||
Complaints and Grievances
|
||||
-------------------------
|
||||
|
||||
Speed
|
||||
~~~~~
|
||||
|
||||
Starting up a phantomjs instance and running a suite turns out to have
|
||||
a rather high overhead, on the order of a second on this machine
|
||||
(2.4GHz, 8GB RAM and an SSD).
|
||||
|
||||
As each ``QUnitSuite`` currently creates its own phantomjs instance,
|
||||
it's probably a good idea to create bigger suites (put many modules &
|
||||
tests in the same QUnit html file, which doesn't preclude splitting
|
||||
them across multiple js files).
|
||||
|
||||
Hacks
|
||||
~~~~~
|
||||
|
||||
QUnitSuite contains a pretty big hack which may or may not cause
|
||||
problem depending on your exact setup: in case of case failure or
|
||||
error, ``unittest.TestResult`` formats the error traceback provided
|
||||
alongside the test object. This goes through Python's
|
||||
traceback-formatting code and there are no hooks there.
|
||||
|
||||
One could expect to use a custom ``TestResult``, but for test suites
|
||||
the ``TestResult`` instance must be provided by the caller, so there
|
||||
is no direct hook onto it.
|
||||
|
||||
This leaves three options:
|
||||
|
||||
* Create a custom ``TestResult`` class and require that it be the one
|
||||
provided to the test suite. This requires altered work flows,
|
||||
customization of the test runner and (as far as I know) isn't
|
||||
available through Python 2.7's autodiscovery. It's the cleanest
|
||||
option but completely fails on practicality.
|
||||
|
||||
* Create a custom ``TestResult`` which directly alters the original
|
||||
result's ``errors`` and ``failures`` attributes as they're part of
|
||||
the testrunner API. This would work but may put custom results in a
|
||||
strange state and break e.g. unittest2's ``@failfast``.
|
||||
|
||||
* Lastly, monkeypatch the undocumented and implementation detail
|
||||
``_exc_info_to_string`` on the provided ``result``. This is the
|
||||
route taken, at least for now.
|
||||
|
||||
.. _QUnit: http://qunitjs.com/
|
||||
|
||||
.. _PhantomJS: http://phantomjs.org/
|
||||
|
||||
.. _Ben Alman: http://benalman.com/
|
||||
|
||||
.. _grunt: http://gruntjs.com/
|
||||
+95
@@ -0,0 +1,95 @@
|
||||
/*
|
||||
* grunt
|
||||
* http://gruntjs.com/
|
||||
*
|
||||
* Copyright (c) 2012 "Cowboy" Ben Alman
|
||||
* Licensed under the MIT license.
|
||||
* http://benalman.com/about/license/
|
||||
*/
|
||||
|
||||
/*global phantom:true*/
|
||||
|
||||
'use strict';
|
||||
|
||||
var fs = require('fs');
|
||||
|
||||
// The page .html file to load.
|
||||
var url = phantom.args[0];
|
||||
// Extra, optionally overridable stuff.
|
||||
var options = JSON.parse(phantom.args[1] || {});
|
||||
|
||||
// Default options.
|
||||
if (!options.timeout) { options.timeout = 5000; }
|
||||
|
||||
// Keep track of the last time a client message was sent.
|
||||
var last = new Date();
|
||||
|
||||
// Messages are sent to the parent by appending them to the tempfile.
|
||||
var sendMessage = function(arg) {
|
||||
var args = Array.isArray(arg) ? arg : [].slice.call(arguments);
|
||||
last = new Date();
|
||||
console.log(JSON.stringify(args));
|
||||
};
|
||||
|
||||
// This allows grunt to abort if the PhantomJS version isn't adequate.
|
||||
sendMessage('private', 'version', phantom.version);
|
||||
|
||||
// Abort if the page doesn't send any messages for a while.
|
||||
setInterval(function() {
|
||||
if (new Date() - last > options.timeout) {
|
||||
sendMessage('fail.timeout');
|
||||
phantom.exit();
|
||||
}
|
||||
}, 100);
|
||||
|
||||
// Create a new page.
|
||||
var page = require('webpage').create();
|
||||
|
||||
// The client page must send its messages via alert(jsonstring).
|
||||
page.onAlert = function(args) {
|
||||
sendMessage(JSON.parse(args));
|
||||
};
|
||||
|
||||
// Keep track if the client-side helper script already has been injected.
|
||||
var injected;
|
||||
page.onUrlChanged = function(newUrl) {
|
||||
injected = false;
|
||||
sendMessage('onUrlChanged', newUrl);
|
||||
};
|
||||
|
||||
// Relay console logging messages.
|
||||
page.onConsoleMessage = function(message) {
|
||||
sendMessage('console', message);
|
||||
};
|
||||
|
||||
// For debugging.
|
||||
page.onResourceRequested = function(request) {
|
||||
sendMessage('onResourceRequested', request.url);
|
||||
};
|
||||
|
||||
page.onResourceReceived = function(request) {
|
||||
if (request.stage === 'end') {
|
||||
sendMessage('onResourceReceived', request.url);
|
||||
}
|
||||
};
|
||||
|
||||
// Run when the page has finished loading.
|
||||
page.onLoadFinished = function(status) {
|
||||
// The window has loaded.
|
||||
sendMessage('onLoadFinished', status);
|
||||
if (status === 'success') {
|
||||
if (options.inject && !injected) {
|
||||
// Inject client-side helper script, but only if it has not yet been
|
||||
// injected.
|
||||
sendMessage('inject', options.inject);
|
||||
page.injectJs(options.inject);
|
||||
}
|
||||
} else {
|
||||
// File loading failure.
|
||||
sendMessage('fail.load', url);
|
||||
phantom.exit();
|
||||
}
|
||||
};
|
||||
|
||||
// Actually load url.
|
||||
page.open(url);
|
||||
@@ -0,0 +1,22 @@
|
||||
Copyright (c) 2012 "Cowboy" Ben Alman
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the "Software"), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,88 @@
|
||||
/*
|
||||
* grunt
|
||||
* http://gruntjs.com/
|
||||
*
|
||||
* Copyright (c) 2012 "Cowboy" Ben Alman
|
||||
* Licensed under the MIT license.
|
||||
* http://benalman.com/about/license/
|
||||
*/
|
||||
|
||||
/*global QUnit:true, alert:true*/
|
||||
|
||||
'use strict';
|
||||
|
||||
// Don't re-order tests.
|
||||
QUnit.config.reorder = false;
|
||||
// Run tests serially, not in parallel.
|
||||
QUnit.config.autorun = false;
|
||||
|
||||
// Send messages to the parent PhantomJS process via alert! Good times!!
|
||||
function sendMessage() {
|
||||
var args = [].slice.call(arguments);
|
||||
alert(JSON.stringify(args));
|
||||
}
|
||||
|
||||
// These methods connect QUnit to PhantomJS.
|
||||
QUnit.log(function(obj) {
|
||||
// What is this I don’t even
|
||||
if (obj.message === '[object Object], undefined:undefined') { return; }
|
||||
// Parse some stuff before sending it.
|
||||
var actual = QUnit.jsDump.parse(obj.actual);
|
||||
var expected = QUnit.jsDump.parse(obj.expected);
|
||||
// Send it.
|
||||
sendMessage('qunit.log', obj.result, actual, expected, obj.message, obj.source);
|
||||
});
|
||||
|
||||
QUnit.testStart(function(obj) {
|
||||
sendMessage('qunit.testStart', obj.name);
|
||||
});
|
||||
|
||||
QUnit.testDone(function(obj) {
|
||||
sendMessage('qunit.testDone', obj.name, obj.failed, obj.passed, obj.total);
|
||||
});
|
||||
|
||||
QUnit.moduleStart(function(obj) {
|
||||
sendMessage('qunit.moduleStart', obj.name);
|
||||
});
|
||||
|
||||
QUnit.moduleDone(function(obj) {
|
||||
sendMessage('qunit.moduleDone', obj.name, obj.failed, obj.passed, obj.total);
|
||||
});
|
||||
|
||||
QUnit.begin(function() {
|
||||
sendMessage('qunit.begin');
|
||||
});
|
||||
|
||||
QUnit.done(function(obj) {
|
||||
sendMessage('qunit.done', obj.failed, obj.passed, obj.total, obj.runtime);
|
||||
});
|
||||
|
||||
// PhantomJS (up to and including 1.7) uses a version of webkit so old
|
||||
// it does not have Function.prototype.bind:
|
||||
// http://code.google.com/p/phantomjs/issues/detail?id=522
|
||||
|
||||
// Use moz polyfill:
|
||||
// https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind#Compatibility
|
||||
if (!Function.prototype.bind) {
|
||||
Function.prototype.bind = function (oThis) {
|
||||
if (typeof this !== "function") {
|
||||
// closest thing possible to the ECMAScript 5 internal IsCallable function
|
||||
throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
|
||||
}
|
||||
|
||||
var aArgs = Array.prototype.slice.call(arguments, 1),
|
||||
fToBind = this,
|
||||
fNOP = function () {},
|
||||
fBound = function () {
|
||||
return fToBind.apply(this instanceof fNOP && oThis
|
||||
? this
|
||||
: oThis,
|
||||
aArgs.concat(Array.prototype.slice.call(arguments)));
|
||||
};
|
||||
|
||||
fNOP.prototype = this.prototype;
|
||||
fBound.prototype = new fNOP();
|
||||
|
||||
return fBound;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
import json
|
||||
import subprocess
|
||||
import unittest
|
||||
import os
|
||||
import time
|
||||
|
||||
ROOT = os.path.join(os.path.dirname(__file__), 'grunt')
|
||||
|
||||
__all__ = ['QUnitSuite']
|
||||
|
||||
def _exc_info_to_string(err, test):
|
||||
return err
|
||||
|
||||
class QUnitTest(unittest.TestCase):
|
||||
def __init__(self, module, name):
|
||||
self.module = module
|
||||
self.name = name
|
||||
self.failed = False
|
||||
def shortDescription(self):
|
||||
return None
|
||||
def __repr__(self):
|
||||
return '<QUnitTest %s:%s>' % (self.module, self.name)
|
||||
def __str__(self):
|
||||
return '%s: %s' % (self.module, self.name)
|
||||
|
||||
class QUnitSuite(unittest.TestSuite):
|
||||
def __init__(self, qunitfile, timeout=5000):
|
||||
self.testfile = qunitfile
|
||||
self.timeout = timeout
|
||||
self._module = None
|
||||
self._test = None
|
||||
|
||||
def __iter__(self):
|
||||
return iter([self])
|
||||
|
||||
def run(self, result):
|
||||
try:
|
||||
subprocess.call(['phantomjs', '-v'],
|
||||
stdout=open(os.devnull, 'w'),
|
||||
stderr=subprocess.STDOUT)
|
||||
except OSError:
|
||||
test = QUnitTest('phantomjs', 'javascript tests')
|
||||
result.startTest(test)
|
||||
result.startTest(test)
|
||||
result.addSkip(test , "phantomjs command not found")
|
||||
result.stopTest(test)
|
||||
return
|
||||
|
||||
result._exc_info_to_string = _exc_info_to_string
|
||||
try:
|
||||
self._run(result)
|
||||
finally:
|
||||
del result._exc_info_to_string
|
||||
|
||||
def _run(self, result):
|
||||
phantom = subprocess.Popen([
|
||||
'phantomjs',
|
||||
'--config=%s' % os.path.join(ROOT, 'phantomjs.json'),
|
||||
os.path.join(ROOT, 'bootstrap.js'), self.testfile,
|
||||
json.dumps({
|
||||
'timeout': self.timeout,
|
||||
'inject': os.path.join(ROOT, 'qunit-phantomjs-bridge.js')
|
||||
})
|
||||
], stdout=subprocess.PIPE)
|
||||
|
||||
try:
|
||||
while True:
|
||||
line = phantom.stdout.readline()
|
||||
if line:
|
||||
if self.process(line, result):
|
||||
break
|
||||
else:
|
||||
time.sleep(0.1)
|
||||
finally:
|
||||
# If the phantomjs process hasn't quit, kill it
|
||||
if phantom.poll() is None:
|
||||
phantom.terminate()
|
||||
|
||||
def process(self, line, result):
|
||||
args = json.loads(line)
|
||||
event_name = args[0]
|
||||
|
||||
if event_name == 'qunit.done':
|
||||
return True
|
||||
elif event_name == 'fail.load':
|
||||
self.add_error(result, "PhantomJS unable to load %s" % args[1])
|
||||
return True
|
||||
elif event_name == 'fail.timeout':
|
||||
self.add_error(result, "PhantomJS timed out, possibly due to a"
|
||||
" missing QUnit start() call")
|
||||
return True
|
||||
|
||||
elif event_name == 'qunit.moduleStart':
|
||||
self._module = args[1].encode('utf-8')
|
||||
elif event_name == 'qunit.moduleStop':
|
||||
self._test = None
|
||||
self._module = None
|
||||
elif event_name == 'qunit.testStart':
|
||||
self._test = QUnitTest(self._module, args[1].encode('utf-8'))
|
||||
result.startTest(self._test)
|
||||
elif event_name == 'qunit.testDone':
|
||||
if not self._test.failed:
|
||||
result.addSuccess(self._test)
|
||||
result.stopTest(self._test)
|
||||
self._test = None
|
||||
elif event_name == 'qunit.log':
|
||||
if args[1]:
|
||||
return False
|
||||
|
||||
self._test.failed = True
|
||||
result.addFailure(
|
||||
self._test, self.failure_to_str(*args[2:]))
|
||||
|
||||
return False
|
||||
|
||||
def add_error(self, result, s):
|
||||
test = QUnitTest('phantomjs', 'startup')
|
||||
result.startTest(test)
|
||||
result.addError(test, s)
|
||||
result.stopTest(test)
|
||||
|
||||
def failure_to_str(self, actual, expected, message, source):
|
||||
if message or actual == expected:
|
||||
formatted = str(message or '')
|
||||
else:
|
||||
formatted = "%s != %s" % (actual, expected)
|
||||
|
||||
if source:
|
||||
formatted += '\n\n' + source
|
||||
|
||||
return formatted
|
||||
@@ -10,6 +10,12 @@ class WebSuite(QUnitSuite):
|
||||
'/web/tests',
|
||||
'mod=*&source={db}&supadmin={supadmin}&password={password}'.format(
|
||||
db=tools.config['db_name'],
|
||||
# al: i dont understand why both are needed, db_password is the
|
||||
# password for postgres and should not appear here of that i'm
|
||||
# sure
|
||||
#
|
||||
# But runbot provides it with this wrong key so i let it here
|
||||
# until it's fixed
|
||||
supadmin=tools.config['db_password'] or 'admin',
|
||||
password=tools.config['admin_passwd'] or 'admin'),
|
||||
''
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-24 18:16+0000\n"
|
||||
"PO-Revision-Date: 2012-12-09 18:06+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -43,7 +43,7 @@ msgstr "Snimi"
|
||||
#: code:addons/web_calendar/static/src/js/calendar.js:99
|
||||
#, python-format
|
||||
msgid "Calendar view has a 'date_delay' type != float"
|
||||
msgstr ""
|
||||
msgstr "U pogledu tipa kalendar polje 'date_delay' tip != float"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -215,6 +215,7 @@ msgstr "Kalendar"
|
||||
#, python-format
|
||||
msgid "Calendar view has not defined 'date_start' attribute."
|
||||
msgstr ""
|
||||
"U pogledu tipa kalendar obavezno je polje 'date_start' - početno vrijeme."
|
||||
|
||||
#~ msgid "Navigator"
|
||||
#~ msgstr "Navigator"
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-25 07:04+0000\n"
|
||||
"PO-Revision-Date: 2012-12-05 07:55+0000\n"
|
||||
"Last-Translator: Erwin van der Ploeg (Endian Solutions) <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-06 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -43,7 +43,7 @@ msgstr "Opslaan"
|
||||
#: code:addons/web_calendar/static/src/js/calendar.js:99
|
||||
#, python-format
|
||||
msgid "Calendar view has a 'date_delay' type != float"
|
||||
msgstr ""
|
||||
msgstr "Agenda weergave heeft een 'date_delay' type != float"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -214,7 +214,7 @@ msgstr "Agenda"
|
||||
#: code:addons/web_calendar/static/src/js/calendar.js:91
|
||||
#, python-format
|
||||
msgid "Calendar view has not defined 'date_start' attribute."
|
||||
msgstr ""
|
||||
msgstr "Agenda weergave heeft een niet gedefinieerde 'date_start' attribute."
|
||||
|
||||
#~ msgid "Navigator"
|
||||
#~ msgstr "Navigator"
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-12-04 12:40+0000\n"
|
||||
"Last-Translator: Andrei Talpa (multibase.pt) <andrei.talpa@multibase.pt>\n"
|
||||
"PO-Revision-Date: 2012-12-07 10:00+0000\n"
|
||||
"Last-Translator: Rui Franco (multibase.pt) <Unknown>\n"
|
||||
"Language-Team: Portuguese <pt@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-05 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16335)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -64,7 +64,7 @@ msgstr "Semana"
|
||||
#: code:addons/web_calendar/static/src/js/calendar.js:161
|
||||
#, python-format
|
||||
msgid "Full day"
|
||||
msgstr ""
|
||||
msgstr "Dia inteiro"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -79,7 +79,7 @@ msgstr "Descrição"
|
||||
#: code:addons/web_calendar/static/src/js/calendar.js:158
|
||||
#, python-format
|
||||
msgid "Event will be deleted permanently, are you sure?"
|
||||
msgstr ""
|
||||
msgstr "O evento será eliminado. Confirma?"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -136,7 +136,7 @@ msgstr ""
|
||||
#: code:addons/web_calendar/static/src/js/calendar.js:80
|
||||
#, python-format
|
||||
msgid "Filter"
|
||||
msgstr ""
|
||||
msgstr "Filtro"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
@@ -179,7 +179,7 @@ msgstr "Mês"
|
||||
#: code:addons/web_calendar/static/src/js/calendar.js:166
|
||||
#, python-format
|
||||
msgid "Disabled"
|
||||
msgstr ""
|
||||
msgstr "Inativo"
|
||||
|
||||
#. module: web_calendar
|
||||
#. openerp-web
|
||||
|
||||
@@ -3,11 +3,6 @@ import openerp
|
||||
class DiagramView(openerp.addons.web.controllers.main.View):
|
||||
_cp_path = "/web_diagram/diagram"
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def load(self, req, model, view_id):
|
||||
fields_view = self.fields_view_get(req, model, view_id, 'diagram')
|
||||
return {'fields_view': fields_view}
|
||||
|
||||
@openerp.addons.web.http.jsonrequest
|
||||
def get_diagram_info(self, req, id, model, node, connector,
|
||||
src_node, des_node, label, **kw):
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-24 01:23+0000\n"
|
||||
"PO-Revision-Date: 2012-02-16 21:55+0000\n"
|
||||
"Last-Translator: Davide Corio - agilebg.com <davide.corio@agilebg.com>\n"
|
||||
"PO-Revision-Date: 2012-12-09 22:40+0000\n"
|
||||
"Last-Translator: Sergio Corato <Unknown>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-11-25 06:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16293)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_diagram
|
||||
#. openerp-web
|
||||
@@ -35,6 +35,10 @@ msgid ""
|
||||
"\n"
|
||||
"Are you sure ?"
|
||||
msgstr ""
|
||||
"La cancellazione di questo nodo è irreversibile. \n"
|
||||
"Saranno cancellate anche tutte le transizioni ad esso correlate.\n"
|
||||
"\n"
|
||||
"Sei sicuro ?"
|
||||
|
||||
#. module: web_diagram
|
||||
#. openerp-web
|
||||
@@ -71,7 +75,7 @@ msgstr "Attività"
|
||||
#: code:addons/web_diagram/static/src/js/diagram.js:422
|
||||
#, python-format
|
||||
msgid "%d / %d"
|
||||
msgstr ""
|
||||
msgstr "%d / %d"
|
||||
|
||||
#. module: web_diagram
|
||||
#. openerp-web
|
||||
@@ -86,7 +90,7 @@ msgstr "Crea:"
|
||||
#: code:addons/web_diagram/static/src/js/diagram.js:187
|
||||
#, python-format
|
||||
msgid "Are you sure?"
|
||||
msgstr ""
|
||||
msgstr "Sei sicuro?"
|
||||
|
||||
#. module: web_diagram
|
||||
#. openerp-web
|
||||
@@ -97,3 +101,6 @@ msgid ""
|
||||
"\n"
|
||||
"Are you sure ?"
|
||||
msgstr ""
|
||||
"La cancellazione di questa transizione è irreversibile.\n"
|
||||
"\n"
|
||||
"Sei sicuro?"
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-24 01:23+0000\n"
|
||||
"PO-Revision-Date: 2012-06-05 19:47+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"PO-Revision-Date: 2012-12-07 09:55+0000\n"
|
||||
"Last-Translator: Rui Franco (multibase.pt) <Unknown>\n"
|
||||
"Language-Team: Portuguese <pt@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-11-25 06:41+0000\n"
|
||||
"X-Generator: Launchpad (build 16293)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_diagram
|
||||
#. openerp-web
|
||||
@@ -75,7 +75,7 @@ msgstr "Atividade"
|
||||
#: code:addons/web_diagram/static/src/js/diagram.js:422
|
||||
#, python-format
|
||||
msgid "%d / %d"
|
||||
msgstr ""
|
||||
msgstr "%d / %d"
|
||||
|
||||
#. module: web_diagram
|
||||
#. openerp-web
|
||||
|
||||
@@ -9,6 +9,7 @@ var QWeb = instance.web.qweb,
|
||||
instance.web.views.add('diagram', 'instance.web.DiagramView');
|
||||
instance.web.DiagramView = instance.web.View.extend({
|
||||
display_name: _lt('Diagram'),
|
||||
view_type: 'diagram',
|
||||
searchable: false,
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
var self = this;
|
||||
@@ -24,12 +25,6 @@ instance.web.DiagramView = instance.web.View.extend({
|
||||
this.on('view_loaded', self, self.load_diagram);
|
||||
this.on('pager_action_executed', self, self.pager_action_trigger);
|
||||
},
|
||||
start: function() {
|
||||
var self = this;
|
||||
return this.rpc("/web_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}).done(function(r) {
|
||||
self.load_diagram(r);
|
||||
});
|
||||
},
|
||||
|
||||
toTitleCase: function(str) {
|
||||
return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
|
||||
@@ -41,7 +36,7 @@ instance.web.DiagramView = instance.web.View.extend({
|
||||
this.id = this.ids[self.dataset.index || 0];
|
||||
}
|
||||
|
||||
this.fields_view = result.fields_view,
|
||||
this.fields_view = result,
|
||||
this.view_id = this.fields_view.view_id,
|
||||
this.fields = this.fields_view.fields,
|
||||
this.nodes = this.fields_view.arch.children[0],
|
||||
|
||||
+20
-20
@@ -8,28 +8,28 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-02-16 21:56+0000\n"
|
||||
"Last-Translator: Davide Corio - agilebg.com <davide.corio@agilebg.com>\n"
|
||||
"PO-Revision-Date: 2012-12-09 23:09+0000\n"
|
||||
"Last-Translator: Sergio Corato <Unknown>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:12
|
||||
#, python-format
|
||||
msgid "Bars"
|
||||
msgstr ""
|
||||
msgstr "Barre"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:33
|
||||
#, python-format
|
||||
msgid "Show Data"
|
||||
msgstr ""
|
||||
msgstr "Visualizza Dati"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
@@ -43,95 +43,95 @@ msgstr "Grafico"
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:25
|
||||
#, python-format
|
||||
msgid "Inside"
|
||||
msgstr ""
|
||||
msgstr "Interno"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:3
|
||||
#, python-format
|
||||
msgid "í"
|
||||
msgstr ""
|
||||
msgstr "í"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:11
|
||||
#, python-format
|
||||
msgid "Pie"
|
||||
msgstr ""
|
||||
msgstr "Torta"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:28
|
||||
#, python-format
|
||||
msgid "Actions"
|
||||
msgstr ""
|
||||
msgstr "Azioni"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:7
|
||||
#, python-format
|
||||
msgid "Graph Mode"
|
||||
msgstr ""
|
||||
msgstr "Modalità Grafico"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:18
|
||||
#, python-format
|
||||
msgid "Radar"
|
||||
msgstr ""
|
||||
msgstr "Rete"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:34
|
||||
#, python-format
|
||||
msgid "Download as PNG"
|
||||
msgstr ""
|
||||
msgstr "Download come PNG"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:26
|
||||
#, python-format
|
||||
msgid "Top"
|
||||
msgstr ""
|
||||
msgstr "In alto"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:24
|
||||
#, python-format
|
||||
msgid "Hidden"
|
||||
msgstr ""
|
||||
msgstr "Nascosto"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:3
|
||||
#, python-format
|
||||
msgid "Graph Options"
|
||||
msgstr ""
|
||||
msgstr "Opzioni Grafico"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:14
|
||||
#, python-format
|
||||
msgid "Lines"
|
||||
msgstr ""
|
||||
msgstr "Righe"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:20
|
||||
#, python-format
|
||||
msgid "Legend"
|
||||
msgstr ""
|
||||
msgstr "Legenda"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:32
|
||||
#, python-format
|
||||
msgid "Switch Axis"
|
||||
msgstr ""
|
||||
msgstr "Inverti Asse"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:15
|
||||
#, python-format
|
||||
msgid "Areas"
|
||||
msgstr ""
|
||||
msgstr "Aree"
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-29 19:33+0000\n"
|
||||
"Last-Translator: Wei \"oldrev\" Li <oldrev@gmail.com>\n"
|
||||
"PO-Revision-Date: 2012-12-07 15:34+0000\n"
|
||||
"Last-Translator: ccdos <ccdos@163.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <zh_CN@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
@@ -50,7 +50,7 @@ msgstr "内部"
|
||||
#: code:addons/web_graph/static/src/xml/web_graph.xml:3
|
||||
#, python-format
|
||||
msgid "í"
|
||||
msgstr ""
|
||||
msgstr "í"
|
||||
|
||||
#. module: web_graph
|
||||
#. openerp-web
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
position: relative;
|
||||
display: block;
|
||||
padding: 2px 4px 2px 20px;
|
||||
line-height: 14px;
|
||||
line-height: 12px;
|
||||
color: #4c4c4c;
|
||||
text-decoration: none;
|
||||
}
|
||||
@@ -59,10 +59,12 @@
|
||||
.openerp .open .graph-dropdown {
|
||||
display: block;
|
||||
}
|
||||
.graph-menu {
|
||||
padding: 3px;
|
||||
|
||||
.openerp .graph-menu {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.graph-menu .active:before {
|
||||
.openerp .graph-menu .active:before {
|
||||
content: "W";
|
||||
font-family: "entypoRegular" !important;
|
||||
font-size: 24px;
|
||||
@@ -72,7 +74,7 @@
|
||||
left: 4px;
|
||||
top: -2px;
|
||||
}
|
||||
.graph-menu li {
|
||||
padding: 2px;
|
||||
margin-left: 10px;
|
||||
.openerp .graph-menu li {
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-27 22:58+0000\n"
|
||||
"PO-Revision-Date: 2012-12-06 15:32+0000\n"
|
||||
"Last-Translator: fshahy <fshahy@gmail.com>\n"
|
||||
"Language-Team: Persian <fa@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-07 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -29,7 +29,7 @@ msgstr "ویرایش ستون"
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:413
|
||||
#, python-format
|
||||
msgid "An error has occured while moving the record to this group."
|
||||
msgstr ""
|
||||
msgstr "هنگام انتقال رکورد به این گروه خزایی رخ داده است."
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -150,7 +150,7 @@ msgstr "یا"
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:51
|
||||
#, python-format
|
||||
msgid "99+"
|
||||
msgstr ""
|
||||
msgstr "+۹۹"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-24 18:09+0000\n"
|
||||
"PO-Revision-Date: 2012-12-09 17:58+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -29,7 +29,7 @@ msgstr "Uredi stupac"
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:413
|
||||
#, python-format
|
||||
msgid "An error has occured while moving the record to this group."
|
||||
msgstr ""
|
||||
msgstr "Greška kod promjene grupe"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -150,7 +150,7 @@ msgstr "ili"
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:51
|
||||
#, python-format
|
||||
msgid "99+"
|
||||
msgstr ""
|
||||
msgstr "99+"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,21 +8,21 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-02-16 21:57+0000\n"
|
||||
"Last-Translator: Davide Corio - agilebg.com <davide.corio@agilebg.com>\n"
|
||||
"PO-Revision-Date: 2012-12-09 22:52+0000\n"
|
||||
"Last-Translator: Sergio Corato <Unknown>\n"
|
||||
"Language-Team: Italian <it@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:698
|
||||
#, python-format
|
||||
msgid "Edit column"
|
||||
msgstr ""
|
||||
msgstr "Modifica colonna"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -30,6 +30,7 @@ msgstr ""
|
||||
#, python-format
|
||||
msgid "An error has occured while moving the record to this group."
|
||||
msgstr ""
|
||||
"E' avvenuto un errore durante lo spostamento del record a questo gruppo."
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -50,35 +51,35 @@ msgstr "Non definito"
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:717
|
||||
#, python-format
|
||||
msgid "Are you sure to remove this column ?"
|
||||
msgstr ""
|
||||
msgstr "Sei sicuro di rimuovere questa colonna ?"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:42
|
||||
#, python-format
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
msgstr "Modifica"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:188
|
||||
#, python-format
|
||||
msgid "Add column"
|
||||
msgstr ""
|
||||
msgstr "Aggiungi colonna"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:1093
|
||||
#, python-format
|
||||
msgid "Create: "
|
||||
msgstr ""
|
||||
msgstr "Crea: "
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:24
|
||||
#, python-format
|
||||
msgid "Add a new column"
|
||||
msgstr ""
|
||||
msgstr "Aggiungi una nuova colonna"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -86,21 +87,21 @@ msgstr ""
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:40
|
||||
#, python-format
|
||||
msgid "Fold"
|
||||
msgstr ""
|
||||
msgstr "Arrotola"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:90
|
||||
#, python-format
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
msgstr "Aggiungi"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:35
|
||||
#, python-format
|
||||
msgid "Quick create"
|
||||
msgstr ""
|
||||
msgstr "Creazione rapida"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -114,7 +115,7 @@ msgstr "Sicuro di voler eliminare questo record?"
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:688
|
||||
#, python-format
|
||||
msgid "Unfold"
|
||||
msgstr ""
|
||||
msgstr "Allarga"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -128,7 +129,7 @@ msgstr "Mostra altro... ("
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:91
|
||||
#, python-format
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
msgstr "Annulla"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -143,21 +144,21 @@ msgstr "rimanenti)"
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:90
|
||||
#, python-format
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
msgstr "o"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:51
|
||||
#, python-format
|
||||
msgid "99+"
|
||||
msgstr ""
|
||||
msgstr "99+"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:43
|
||||
#, python-format
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
msgstr "Elimina"
|
||||
|
||||
#~ msgid "Create"
|
||||
#~ msgstr "Crea"
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-25 07:06+0000\n"
|
||||
"PO-Revision-Date: 2012-12-05 07:53+0000\n"
|
||||
"Last-Translator: Erwin van der Ploeg (Endian Solutions) <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-06 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -30,6 +30,7 @@ msgstr "Kolom aanpassen"
|
||||
#, python-format
|
||||
msgid "An error has occured while moving the record to this group."
|
||||
msgstr ""
|
||||
"Er is een fout opgetreden bij het verplaatsen van het record naar deze groep."
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -150,7 +151,7 @@ msgstr "of"
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:51
|
||||
#, python-format
|
||||
msgid "99+"
|
||||
msgstr ""
|
||||
msgstr "99+"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-12-04 12:44+0000\n"
|
||||
"PO-Revision-Date: 2012-12-07 09:57+0000\n"
|
||||
"Last-Translator: Andrei Talpa (multibase.pt) <andrei.talpa@multibase.pt>\n"
|
||||
"Language-Team: Portuguese <pt@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-05 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16335)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -29,7 +29,7 @@ msgstr "Editar coluna"
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:413
|
||||
#, python-format
|
||||
msgid "An error has occured while moving the record to this group."
|
||||
msgstr ""
|
||||
msgstr "Ocorreu um erro ao mover o registo para este grupo."
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -86,7 +86,7 @@ msgstr "Adicionar uma nova coluna"
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:40
|
||||
#, python-format
|
||||
msgid "Fold"
|
||||
msgstr ""
|
||||
msgstr "Dobrar"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -100,7 +100,7 @@ msgstr "Adicionar"
|
||||
#: code:addons/web_kanban/static/src/xml/web_kanban.xml:35
|
||||
#, python-format
|
||||
msgid "Quick create"
|
||||
msgstr ""
|
||||
msgstr "Criação rápida"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
@@ -114,7 +114,7 @@ msgstr "Tem certeza que quer remover este registo?"
|
||||
#: code:addons/web_kanban/static/src/js/kanban.js:688
|
||||
#, python-format
|
||||
msgid "Unfold"
|
||||
msgstr ""
|
||||
msgstr "Desdobrar"
|
||||
|
||||
#. module: web_kanban
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,21 +8,21 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-27 22:58+0000\n"
|
||||
"PO-Revision-Date: 2012-12-06 15:25+0000\n"
|
||||
"Last-Translator: fshahy <fshahy@gmail.com>\n"
|
||||
"Language-Team: Persian <fa@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-07 04:47+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:164
|
||||
#, python-format
|
||||
msgid "The following fields are invalid :"
|
||||
msgstr ""
|
||||
msgstr "فیلدهای زیر معتبر نیستند."
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -36,7 +36,7 @@ msgstr "ایجاد"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:986
|
||||
#, python-format
|
||||
msgid "New Field"
|
||||
msgstr ""
|
||||
msgstr "فیلد جدید"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -71,7 +71,7 @@ msgstr "ذخیره"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:393
|
||||
#, python-format
|
||||
msgid "Select an element"
|
||||
msgstr ""
|
||||
msgstr "یک مورد را انتخاب کنید."
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -86,7 +86,7 @@ msgstr "به روز رسانی"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:263
|
||||
#, python-format
|
||||
msgid "Please select view in list :"
|
||||
msgstr ""
|
||||
msgstr "لطفا نما را از لیست انتخاب کنید."
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,21 +8,21 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-24 18:01+0000\n"
|
||||
"PO-Revision-Date: 2012-12-09 17:57+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-10 04:44+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:164
|
||||
#, python-format
|
||||
msgid "The following fields are invalid :"
|
||||
msgstr ""
|
||||
msgstr "Popis neispravnih polja:"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -36,7 +36,7 @@ msgstr "Kreiraj"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:986
|
||||
#, python-format
|
||||
msgid "New Field"
|
||||
msgstr ""
|
||||
msgstr "Novo polje"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -71,7 +71,7 @@ msgstr "Snimi"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:393
|
||||
#, python-format
|
||||
msgid "Select an element"
|
||||
msgstr ""
|
||||
msgstr "Odaberite element"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -86,7 +86,7 @@ msgstr "Ažuriraj"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:263
|
||||
#, python-format
|
||||
msgid "Please select view in list :"
|
||||
msgstr ""
|
||||
msgstr "Odaberite pogled iz popisa:"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -150,7 +150,7 @@ msgstr "Da li zaista želite obrisati ovaj čvor?"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:390
|
||||
#, python-format
|
||||
msgid "Can't Update View"
|
||||
msgstr ""
|
||||
msgstr "Ažuriranje pogleda nije moguće"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,21 +8,21 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-11-25 07:09+0000\n"
|
||||
"PO-Revision-Date: 2012-12-05 07:54+0000\n"
|
||||
"Last-Translator: Erwin van der Ploeg (Endian Solutions) <Unknown>\n"
|
||||
"Language-Team: Dutch <nl@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-01 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16319)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-06 04:54+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:164
|
||||
#, python-format
|
||||
msgid "The following fields are invalid :"
|
||||
msgstr ""
|
||||
msgstr "De volgende velden zijn ongeldig."
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -36,7 +36,7 @@ msgstr "Aanmaken"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:986
|
||||
#, python-format
|
||||
msgid "New Field"
|
||||
msgstr ""
|
||||
msgstr "Nieuw veld"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -71,7 +71,7 @@ msgstr "Opslaan"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:393
|
||||
#, python-format
|
||||
msgid "Select an element"
|
||||
msgstr ""
|
||||
msgstr "Selecteer een element"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -86,7 +86,7 @@ msgstr "Bijwerken"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:263
|
||||
#, python-format
|
||||
msgid "Please select view in list :"
|
||||
msgstr ""
|
||||
msgstr "Selecteer weergave in de lijst:"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -150,7 +150,7 @@ msgstr "Wilt u dit knooppunt werkelijk verwijderen?"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:390
|
||||
#, python-format
|
||||
msgid "Can't Update View"
|
||||
msgstr ""
|
||||
msgstr "Kan de weergave niet vernieuwen"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
|
||||
@@ -8,14 +8,14 @@ msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2012-11-30 18:13+0000\n"
|
||||
"PO-Revision-Date: 2012-12-04 12:42+0000\n"
|
||||
"Last-Translator: Andrei Talpa (multibase.pt) <andrei.talpa@multibase.pt>\n"
|
||||
"PO-Revision-Date: 2012-12-07 09:56+0000\n"
|
||||
"Last-Translator: Rui Franco (multibase.pt) <Unknown>\n"
|
||||
"Language-Team: Portuguese <pt@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-05 05:43+0000\n"
|
||||
"X-Generator: Launchpad (build 16335)\n"
|
||||
"X-Launchpad-Export-Date: 2012-12-08 05:21+0000\n"
|
||||
"X-Generator: Launchpad (build 16341)\n"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -71,7 +71,7 @@ msgstr "Guardar"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:393
|
||||
#, python-format
|
||||
msgid "Select an element"
|
||||
msgstr ""
|
||||
msgstr "Selecione um elemento"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -86,7 +86,7 @@ msgstr "Atualizar"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:263
|
||||
#, python-format
|
||||
msgid "Please select view in list :"
|
||||
msgstr ""
|
||||
msgstr "Por favor, selecione uma vista da lista"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
@@ -150,7 +150,7 @@ msgstr "Quer mesmo remover este nó?"
|
||||
#: code:addons/web_view_editor/static/src/js/view_editor.js:390
|
||||
#, python-format
|
||||
msgid "Can't Update View"
|
||||
msgstr ""
|
||||
msgstr "Não é possível atualizar a vista"
|
||||
|
||||
#. module: web_view_editor
|
||||
#. openerp-web
|
||||
|
||||
Reference in New Issue
Block a user