Turkesh Patel (Open ERP) 2013-11-26 18:11:31 +05:30
commit 3b6aa6a369
355 changed files with 2491 additions and 1520 deletions

View File

@ -90,13 +90,12 @@ db_list = http.db_list
db_monodb = http.db_monodb
def redirect_with_hash(url, code=303):
if request.httprequest.user_agent.browser == 'msie':
try:
version = float(request.httprequest.user_agent.version)
if version < 10:
return "<html><head><script>window.location = '%s#' + location.hash;</script></head></html>" % url
except Exception:
pass
if request.httprequest.user_agent.browser in ('msie', 'safari'):
# Most IE and Safari versions decided not to preserve location.hash upon
# redirect. And even if IE10 pretends to support it, it still fails
# inexplicably in case of multiple redirects (and we do have some).
# See extensive test page at http://greenbytes.de/tech/tc/httpredirects/
return "<html><head><script>window.location = '%s' + location.hash;</script></head></html>" % url
return werkzeug.utils.redirect(url, code)
def module_topological_sort(modules):
@ -345,7 +344,7 @@ def make_conditional(response, last_modified=None, etag=None):
response.set_etag(etag)
return response.make_conditional(request.httprequest)
def login_and_redirect(db, login, key, redirect_url='/'):
def login_and_redirect(db, login, key, redirect_url='/web'):
request.session.authenticate(db, login, key)
return set_cookie_and_redirect(redirect_url)
@ -534,14 +533,12 @@ class Home(http.Controller):
def web_client(self, s_action=None, db=None, debug=False, **kw):
debug = debug != False
try:
lst = http.db_list()
except openerp.exceptions.AccessDenied:
lst = []
lst = http.db_list(True)
if db not in lst:
db = None
guessed_db = http.db_monodb(request.httprequest)
if guessed_db is None and len(lst) > 0:
guessed_db = lst[0]
def redirect(db):
query = dict(urlparse.parse_qsl(request.httprequest.query_string, keep_blank_values=True))
@ -549,11 +546,8 @@ class Home(http.Controller):
redirect = request.httprequest.path + '?' + urllib.urlencode(query)
return redirect_with_hash(redirect)
if guessed_db is None and db is None and lst:
return redirect(lst[0])
if guessed_db is None and lst:
guessed_db = lst[0]
if db is None and guessed_db is not None:
return redirect(guessed_db)
if db is not None and db != guessed_db:
request.session.logout()
@ -571,7 +565,7 @@ class Home(http.Controller):
}
return request.make_response(r, {'Cache-Control': 'no-cache', 'Content-Type': 'text/html; charset=utf-8'})
@http.route('/login', type='http', auth="user")
@http.route('/login', type='http', auth="none")
def login(self, db, login, key):
return login_and_redirect(db, login, key)
@ -931,6 +925,11 @@ class Session(http.Controller):
def destroy(self):
request.session.logout()
@http.route('/web/session/logout', type='http', auth="user")
def logout(self, redirect='/web'):
request.session.logout()
return werkzeug.utils.redirect(redirect, 303)
class Menu(http.Controller):
@http.route('/web/menu/get_user_roots', type='json', auth="user")

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
"X-Poedit-Language: Czech\n"
#. module: web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,15 +14,15 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:147
#, python-format
msgid "Default language:"
msgstr "Standardsprache:"
msgstr "Standard-Sprache:"
#. module: web
#. openerp-web
@ -75,7 +75,7 @@ msgstr "Master Passwort"
#: code:addons/web/static/src/xml/base.xml:292
#, python-format
msgid "Change Master Password"
msgstr "Hauptpasswort ändern"
msgstr "Master Passwort ändern"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web
@ -227,7 +227,7 @@ msgstr "Widget type '%s' is not implemented"
#: code:addons/web/static/src/xml/base.xml:1626
#, python-format
msgid "Share with all users"
msgstr ""
msgstr "Share with all users"
#. module: web
#. openerp-web
@ -468,7 +468,7 @@ msgstr "Take a minute to get a coffee,<br />because it's loading..."
#: code:addons/web/static/src/xml/base.xml:435
#, python-format
msgid "Activate the developer mode"
msgstr ""
msgstr "Activate the developer mode"
#. module: web
#. openerp-web
@ -1802,7 +1802,7 @@ msgstr "View Fields"
#: code:addons/web/static/src/xml/base.xml:348
#, python-format
msgid "Confirm New Password:"
msgstr ""
msgstr "Confirm New Password:"
#. module: web
#. openerp-web
@ -1860,7 +1860,7 @@ msgstr "OpenERP"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:8
#, python-format
msgid "Stop"
msgstr ""
msgstr "Stop"
#. module: web
#. openerp-web
@ -1884,7 +1884,7 @@ msgstr "Uploading ..."
#: code:addons/web/static/src/xml/base.xml:1874
#, python-format
msgid "Name:"
msgstr ""
msgstr "Name:"
#. module: web
#. openerp-web
@ -1898,7 +1898,7 @@ msgstr "About"
#: code:addons/web/static/src/xml/base.xml:1457
#, python-format
msgid "Search Again"
msgstr ""
msgstr "Search Again"
#. module: web
#. openerp-web
@ -1931,13 +1931,15 @@ msgid ""
"Grouping on field '%s' is not possible because that field does not appear in "
"the list view."
msgstr ""
"Grouping on field '%s' is not possible because that field does not appear in "
"the list view."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:559
#, python-format
msgid "Set Defaults"
msgstr ""
msgstr "Set Defaults"
#. module: web
#. openerp-web
@ -1980,7 +1982,7 @@ msgstr "Type:"
#: code:addons/web/static/src/js/chrome.js:560
#, python-format
msgid "Incorrect super-administrator password"
msgstr ""
msgstr "Incorrect super-administrator password"
#. module: web
#. openerp-web
@ -1995,14 +1997,14 @@ msgstr "Object:"
#: code:addons/web/static/src/js/chrome.js:343
#, python-format
msgid "Loading"
msgstr ""
msgstr "Loading"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:599
#, python-format
msgid "about a year ago"
msgstr ""
msgstr "about a year ago"
#. module: web
#. openerp-web
@ -2022,13 +2024,15 @@ msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
msgstr ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:594
#, python-format
msgid "%d hours ago"
msgstr ""
msgstr "%d hours ago"
#. module: web
#. openerp-web
@ -2043,7 +2047,7 @@ msgstr "Add: "
#: code:addons/web/static/src/xml/base.xml:1879
#, python-format
msgid "Quick Add"
msgstr ""
msgstr "Quick Add"
#. module: web
#. openerp-web
@ -2070,7 +2074,7 @@ msgstr "Ok"
#: code:addons/web/static/src/js/views.js:1237
#, python-format
msgid "Uploading..."
msgstr ""
msgstr "Uploading..."
#. module: web
#. openerp-web
@ -2084,7 +2088,7 @@ msgstr "Load Demonstration data:"
#: code:addons/web/static/src/xml/base.xml:637
#, python-format
msgid "Created by :"
msgstr ""
msgstr "Created by :"
#. module: web
#. openerp-web
@ -2092,7 +2096,7 @@ msgstr ""
#: code:addons/web/static/src/js/dates.js:26
#, python-format
msgid "'%s' is not a valid datetime"
msgstr ""
msgstr "'%s' is not a valid datetime"
#. module: web
#. openerp-web
@ -2137,14 +2141,14 @@ msgstr "is true"
#: code:addons/web/static/src/js/view_form.js:4030
#, python-format
msgid "Add an item"
msgstr ""
msgstr "Add an item"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1621
#, python-format
msgid "Save current filter"
msgstr ""
msgstr "Save current filter"
#. module: web
#. openerp-web
@ -2172,14 +2176,14 @@ msgstr "Download \"%s\""
#: code:addons/web/static/src/js/view_form.js:325
#, python-format
msgid "New"
msgstr ""
msgstr "New"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1777
#, python-format
msgid "Can't convert value %s to context"
msgstr ""
msgstr "Can't convert value %s to context"
#. module: web
#. openerp-web
@ -2245,34 +2249,34 @@ msgstr "is false"
#: code:addons/web/static/src/xml/base.xml:426
#, python-format
msgid "About OpenERP"
msgstr ""
msgstr "About OpenERP"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:301
#, python-format
msgid "'%s' is not a correct date, datetime nor time"
msgstr ""
msgstr "'%s' is not a correct date, datetime nor time"
#. module: web
#: code:addons/web/controllers/main.py:1307
#, python-format
msgid "No content found for field '%s' on '%s:%s'"
msgstr ""
msgstr "No content found for field '%s' on '%s:%s'"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:322
#, python-format
msgid "Database Management"
msgstr ""
msgstr "Database Management"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5138
#, python-format
msgid "Image"
msgstr ""
msgstr "Image"
#. module: web
#. openerp-web
@ -2286,7 +2290,7 @@ msgstr "Manage Databases"
#: code:addons/web/static/src/js/pyeval.js:770
#, python-format
msgid "Evaluation Error"
msgstr ""
msgstr "Evaluation Error"
#. module: web
#. openerp-web
@ -2305,7 +2309,7 @@ msgstr "not a valid integer"
#: code:addons/web/static/src/xml/base.xml:1648
#, python-format
msgid "or"
msgstr ""
msgstr "or"
#. module: web
#. openerp-web
@ -2319,7 +2323,7 @@ msgstr "No"
#: code:addons/web/static/src/js/formats.js:313
#, python-format
msgid "'%s' is not convertible to date, datetime nor time"
msgstr ""
msgstr "'%s' is not convertible to date, datetime nor time"
#. module: web
#. openerp-web
@ -2337,21 +2341,21 @@ msgstr "Duplicate"
#: code:addons/web/static/src/xml/base.xml:1419
#, python-format
msgid "Discard"
msgstr ""
msgstr "Discard"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1642
#, python-format
msgid "Add a condition"
msgstr ""
msgstr "Add a condition"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:619
#, python-format
msgid "Still loading..."
msgstr ""
msgstr "Still loading..."
#. module: web
#. openerp-web
@ -2365,7 +2369,7 @@ msgstr "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
#: code:addons/web/static/src/js/view_form.js:3926
#, python-format
msgid "The o2m record must be saved before an action can be used"
msgstr ""
msgstr "The o2m record must be saved before an action can be used"
#. module: web
#. openerp-web
@ -2379,14 +2383,14 @@ msgstr "Backed"
#: code:addons/web/static/src/xml/base.xml:1628
#, python-format
msgid "Use by default"
msgstr ""
msgstr "Use by default"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1358
#, python-format
msgid "%s (%d)"
msgstr ""
msgstr "%s (%d)"
#. module: web
#. openerp-web
@ -2400,7 +2404,7 @@ msgstr "triggered from search view"
#: code:addons/web/static/src/js/search.js:1079
#, python-format
msgid "Filter"
msgstr ""
msgstr "Filter"
#. module: web
#. openerp-web
@ -2442,14 +2446,14 @@ msgstr "Edit Workflow"
#: code:addons/web/static/src/js/views.js:1246
#, python-format
msgid "Do you really want to delete this attachment ?"
msgstr ""
msgstr "Do you really want to delete this attachment ?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views.js:914
#, python-format
msgid "Technical Translation"
msgstr ""
msgstr "Technical Translation"
#. module: web
#. openerp-web
@ -2463,21 +2467,21 @@ msgstr "Field:"
#: code:addons/web/static/src/xml/base.xml:642
#, python-format
msgid "Modified by :"
msgstr ""
msgstr "Modified by :"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "The database %s has been dropped"
msgstr ""
msgstr "The database %s has been dropped"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:482
#, python-format
msgid "User's timezone"
msgstr ""
msgstr "User's timezone"
#. module: web
#. openerp-web
@ -2492,7 +2496,7 @@ msgstr "Client Error"
#: code:addons/web/static/src/js/views.js:1073
#, python-format
msgid "Print"
msgstr ""
msgstr "Print"
#. module: web
#. openerp-web
@ -2507,6 +2511,7 @@ msgstr "Special:"
msgid ""
"The old password you provided is incorrect, your password was not changed."
msgstr ""
"The old password you provided is incorrect, your password was not changed."
#. module: web
#. openerp-web
@ -2534,7 +2539,7 @@ msgstr "Save & Close"
#: code:addons/web/static/src/js/view_form.js:2932
#, python-format
msgid "Search More..."
msgstr ""
msgstr "Search More..."
#. module: web
#. openerp-web
@ -2573,21 +2578,21 @@ msgstr "Select date"
#: code:addons/web/static/src/js/search.js:1369
#, python-format
msgid "Search %(field)s for: %(value)s"
msgstr ""
msgstr "Search %(field)s for: %(value)s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1305
#, python-format
msgid "Delete this file"
msgstr ""
msgstr "Delete this file"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:168
#, python-format
msgid "Create Database"
msgstr ""
msgstr "Create Database"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
"Language: es\n"
#. module: web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web
@ -36,7 +36,7 @@ msgstr "%d分前"
#: code:addons/web/static/src/js/coresetup.js:620
#, python-format
msgid "Still loading...<br />Please be patient."
msgstr ""
msgstr "ロード中です...<br />今しばらくお待ちください。"
#. module: web
#. openerp-web
@ -75,14 +75,14 @@ msgstr "マスタパスワード:"
#: code:addons/web/static/src/xml/base.xml:292
#, python-format
msgid "Change Master Password"
msgstr ""
msgstr "マスターパスワードを変更"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:513
#, 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:559
#, python-format
msgid "Access Denied"
msgstr ""
msgstr "アクセスが拒否されました。"
#. module: web
#. openerp-web
@ -119,7 +119,7 @@ msgstr "1時間前"
#: code:addons/web/static/src/xml/base.xml:234
#, python-format
msgid "Backup Database"
msgstr ""
msgstr "データベースをバックアップ"
#. module: web
#. openerp-web
@ -227,7 +227,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1626
#, python-format
msgid "Share with all users"
msgstr "全てのユーザと共有"
msgstr "全ユーザと共有"
#. module: web
#. openerp-web
@ -270,7 +270,7 @@ msgstr "新しいパスワード:"
#: code:addons/web/static/src/xml/base.xml:632
#, python-format
msgid "Attachment :"
msgstr ""
msgstr "添付:"
#. module: web
#. openerp-web
@ -559,7 +559,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_form.js:2955
#, python-format
msgid "Create and Edit..."
msgstr ""
msgstr "登録・編集..."
#. module: web
#. openerp-web
@ -818,7 +818,7 @@ msgstr "区切り文字:"
#: code:addons/web/static/src/xml/base.xml:484
#, python-format
msgid "Browser's timezone"
msgstr ""
msgstr "ブラウザタイムゾーン"
#. module: web
#. openerp-web
@ -1074,7 +1074,7 @@ msgstr "検索"
#: code:addons/web/static/src/js/view_form.js:4482
#, python-format
msgid "Open: "
msgstr "開く: "
msgstr "オープン: "
#. module: web
#. openerp-web
@ -1137,7 +1137,7 @@ msgstr "キャンセル"
#: code:addons/web/static/src/xml/base.xml:9
#, python-format
msgid "Loading..."
msgstr "読込中..."
msgstr "読込中..."
#. module: web
#. openerp-web
@ -1151,7 +1151,7 @@ msgstr "最終更新者:"
#: code:addons/web/static/src/xml/base.xml:492
#, python-format
msgid "Timezone mismatch"
msgstr ""
msgstr "タイムゾーン不一致"
#. module: web
#. openerp-web
@ -1305,7 +1305,7 @@ msgstr "少なくとも1つのレコードを選んで下さい。"
#: code:addons/web/static/src/js/coresetup.js:621
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
msgstr ""
msgstr "しばしご辛抱を。<br />引き続き読込中です..."
#. module: web
#. openerp-web
@ -1354,7 +1354,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:463
#, python-format
msgid "Edit Company data"
msgstr ""
msgstr "会社データを編集"
#. module: web
#. openerp-web
@ -1597,7 +1597,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:467
#, python-format
msgid "Powered by"
msgstr "で動く"
msgstr "Powered by"
#. module: web
#. openerp-web
@ -1879,7 +1879,7 @@ msgstr ""
#: code:addons/web/static/src/js/chrome.js:1165
#, python-format
msgid "About"
msgstr "について"
msgstr "概要"
#. module: web
#. openerp-web
@ -2123,7 +2123,7 @@ msgstr "は正しい"
#: code:addons/web/static/src/js/view_form.js:4030
#, python-format
msgid "Add an item"
msgstr ""
msgstr "項目を追加"
#. module: web
#. openerp-web
@ -2203,7 +2203,7 @@ msgstr "ボタン"
#: code:addons/web/static/src/xml/base.xml:440
#, python-format
msgid "OpenERP is a trademark of the"
msgstr "OpenERPは商標です"
msgstr "OpenERPの商標帰属:"
#. module: web
#. openerp-web
@ -2265,7 +2265,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:81
#, python-format
msgid "Manage Databases"
msgstr "データベース管理"
msgstr "データベース管理"
#. module: web
#. openerp-web
@ -2330,7 +2330,7 @@ msgstr "破棄"
#: code:addons/web/static/src/xml/base.xml:1642
#, python-format
msgid "Add a condition"
msgstr "条件追加"
msgstr "条件追加"
#. module: web
#. openerp-web
@ -2365,7 +2365,7 @@ msgstr "バックアップされました"
#: code:addons/web/static/src/xml/base.xml:1628
#, python-format
msgid "Use by default"
msgstr ""
msgstr "デフォルト使用"
#. module: web
#. openerp-web
@ -2463,7 +2463,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:482
#, python-format
msgid "User's timezone"
msgstr ""
msgstr "ユーザタイムゾーン"
#. module: web
#. openerp-web
@ -2520,7 +2520,7 @@ msgstr "保存して閉じる"
#: code:addons/web/static/src/js/view_form.js:2932
#, python-format
msgid "Search More..."
msgstr ""
msgstr "さらに検索..."
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web
@ -119,7 +119,7 @@ msgstr "ongeveer 1 uur geleden"
#: code:addons/web/static/src/xml/base.xml:234
#, python-format
msgid "Backup Database"
msgstr "Back-up database"
msgstr "Backup Database"
#. module: web
#. openerp-web
@ -177,7 +177,7 @@ msgstr "Ongeldige gebruikersnaam of wachtwoord"
#: code:addons/web/static/src/xml/base.xml:278
#, python-format
msgid "Master Password:"
msgstr "Hoofdwachtwoord"
msgstr "Hoofdwachtwoord:"
#. module: web
#. openerp-web
@ -213,14 +213,14 @@ msgstr "Laatst datum aangepast:"
#: code:addons/web/static/src/js/search.js:1566
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr "M2O zoek velden behandelen momenteel geen meerdere standaard waardes"
msgstr "M2O zoek velden kunnen momenteel geen meerdere standaard waardes aan"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1241
#, python-format
msgid "Widget type '%s' is not implemented"
msgstr "Widget type '%s' is niet geimplementeerd"
msgstr "Widget type '%s' is niet geïmplementeerd"
#. module: web
#. openerp-web
@ -284,14 +284,14 @@ msgstr "Te exporteren velden"
#: code:addons/web/static/src/js/view_list.js:1350
#, python-format
msgid "Undefined"
msgstr "Onbepaald"
msgstr "Niet gedefinieerd"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5002
#, python-format
msgid "File Upload"
msgstr "Bestand upload"
msgstr "Bestand uploaden"
#. module: web
#. openerp-web
@ -326,7 +326,7 @@ msgstr "OpenERP SA"
#: code:addons/web/static/src/js/search.js:1663
#, python-format
msgid "Custom Filter"
msgstr "Aangepaste Filter"
msgstr "Aangepast filter"
#. module: web
#. openerp-web
@ -370,7 +370,7 @@ msgstr "Downloaden"
#: code:addons/web/static/src/js/formats.js:270
#, python-format
msgid "'%s' is not a correct datetime"
msgstr "'%s' is geen geldinge datum/tijd"
msgstr "'%s' is geen geldige datum/tijd"
#. module: web
#. openerp-web
@ -432,7 +432,7 @@ msgstr "Het was niet mogelijk om de database te herstellen"
#: code:addons/web/static/src/js/view_form.js:4982
#, python-format
msgid "File upload"
msgstr "Bestand upload"
msgstr "Bestand uploaden"
#. module: web
#. openerp-web
@ -461,7 +461,8 @@ msgstr "bevat"
#: code:addons/web/static/src/js/coresetup.js:623
#, python-format
msgid "Take a minute to get a coffee,<br />because it's loading..."
msgstr "Neem een minuutje voor een koffie,<br />want het is aan het laden..."
msgstr ""
"Neem een minuutje om koffie te halen,<br />want het is aan het laden..."
#. module: web
#. openerp-web
@ -489,7 +490,7 @@ msgstr "Groepeer op"
#: code:addons/web/static/src/js/view_list.js:699
#, python-format
msgid "You must select at least one record."
msgstr "U dient tenminste één record te selecteren"
msgstr "U dient tenminste één record te selecteren."
#. module: web
#. openerp-web
@ -503,7 +504,7 @@ msgstr "Weergeven Log (perm_read)"
#: code:addons/web/static/src/js/view_form.js:1071
#, python-format
msgid "Set Default"
msgstr "Gebruik als standaard"
msgstr "Als standaard instellen"
#. module: web
#. openerp-web
@ -552,7 +553,7 @@ msgstr "Teruggezet"
#: code:addons/web/static/src/js/view_list.js:409
#, python-format
msgid "%d-%d of %d"
msgstr "%d-%d of %d"
msgstr "%d-%d van %d"
#. module: web
#. openerp-web
@ -594,7 +595,7 @@ msgstr "Afdrukken Workflow"
#: code:addons/web/static/src/js/chrome.js:413
#, python-format
msgid "Please confirm your new password"
msgstr "Bevestig uw wachtwoord"
msgstr "Bevestig uw nieuwe wachtwoord"
#. module: web
#. openerp-web
@ -681,7 +682,7 @@ msgstr "Filter opslaan"
#: code:addons/web/static/src/xml/base.xml:1372
#, python-format
msgid "Action ID:"
msgstr "Action ID:"
msgstr "Actie ID:"
#. module: web
#. openerp-web
@ -869,7 +870,7 @@ msgstr "OpenERP.com"
#: code:addons/web/static/src/js/view_form.js:2349
#, python-format
msgid "Can't send email to invalid e-mail address"
msgstr "Kan de e-mail niet versturen. Het adres is ongelding."
msgstr "Kan geen email versturen naar ongeldig emailadres"
#. module: web
#. openerp-web
@ -958,7 +959,7 @@ msgstr "Dupliceer database"
#: code:addons/web/static/src/js/chrome.js:585
#, python-format
msgid "Password has been changed successfully"
msgstr "Uw wachtwoord is succesvol gewijzigd."
msgstr "Wachtwoord is succesvol gewijzigd"
#. module: web
#. openerp-web
@ -1000,7 +1001,7 @@ msgid ""
"\n"
"%s"
msgstr ""
"Locale evaluatie fout\n"
"Lokale evaluatie fout\n"
"%s\n"
"\n"
"%s"
@ -1238,7 +1239,7 @@ msgstr "Het nieuwe wachtwoord en haar bevestiging moeten identiek zijn."
#: code:addons/web/static/src/xml/base.xml:266
#, python-format
msgid "Restore Database"
msgstr "Herstel database"
msgstr "Database terugplaatsen"
#. module: web
#. openerp-web
@ -1707,7 +1708,7 @@ msgstr "Het veld is leeg. Er is niets om op te slaan!"
#: code:addons/web/static/src/xml/base.xml:567
#, python-format
msgid "Manage Views"
msgstr "Weergaven beheren"
msgstr "Weergaves beheren"
#. module: web
#. openerp-web
@ -1735,7 +1736,7 @@ msgstr "Aanmaken \"<strong>%s</strong>\""
#: code:addons/web/static/src/js/data_export.js:362
#, python-format
msgid "Please select fields to save export list..."
msgstr "Selecteer aub velden voor opslaan export lijst"
msgstr "Selecteer velden voor opslaan export lijst..."
#. module: web
#. openerp-web
@ -2037,7 +2038,7 @@ msgstr ""
#: code:addons/web/static/src/js/coresetup.js:594
#, python-format
msgid "%d hours ago"
msgstr "%d uren geleden"
msgstr "%d uur geleden"
#. module: web
#. openerp-web
@ -2101,7 +2102,7 @@ msgstr "Aangemaakt door:"
#: code:addons/web/static/src/js/dates.js:26
#, python-format
msgid "'%s' is not a valid datetime"
msgstr "'%s' is geen correcte datum/tijd"
msgstr "'%s' is geen geldige datum/tijd"
#. module: web
#. openerp-web
@ -2233,7 +2234,7 @@ msgstr "OpenERP is een handelsmerk van"
#: code:addons/web/static/src/js/data_export.js:375
#, python-format
msgid "Please select fields to export..."
msgstr "Selecteer velden voor export"
msgstr "Selecteer velden om te exporteren..."
#. module: web
#. openerp-web
@ -2376,7 +2377,8 @@ msgstr "Onjuiste waarde bij veld %(fieldname)s: [%(value)s] is %(message)s"
#, python-format
msgid "The o2m record must be saved before an action can be used"
msgstr ""
"Het O2M record dient bewaard te worden alvorens een actie kan gebruikt worden"
"Het o2m record dient opgeslagen te worden alvorens een actie kan worden "
"gebruikt"
#. module: web
#. openerp-web
@ -2510,7 +2512,7 @@ msgstr "Afdrukken"
#: code:addons/web/static/src/xml/base.xml:1359
#, python-format
msgid "Special:"
msgstr "Special:"
msgstr "Speciaal:"
#. module: web
#: code:addons/web/controllers/main.py:877
@ -2518,7 +2520,7 @@ 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 "
"Het oude wachtwoord wat u heeft ingevoerd is niet correct. Uw wachtwoord is "
"niet gewijzigd."
#. module: web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web
@ -999,6 +999,10 @@ msgid ""
"\n"
"%s"
msgstr ""
"Lokalny błąd oceny\n"
"%s\n"
"\n"
"%s"
#. module: web
#. openerp-web
@ -2020,6 +2024,8 @@ msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
msgstr ""
"Typ pola '%s' musi być typem \"wiele do wielu pól\" w relacji do modelu "
"'ir.attachment'."
#. module: web
#. openerp-web
@ -2156,7 +2162,7 @@ msgstr "Potwierdź"
#: code:addons/web/static/src/js/data_export.js:127
#, python-format
msgid "Please enter save field list name"
msgstr ""
msgstr "Proszę wprowadźić nazwę zapisywej listy pól"
#. module: web
#. openerp-web
@ -2185,7 +2191,7 @@ msgstr "Nie mozna skonwertować wartości %s do kontekstu"
#: code:addons/web/static/src/xml/base.xml:563
#, python-format
msgid "Fields View Get"
msgstr ""
msgstr "Pobierz widok pól"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web
@ -75,7 +75,7 @@ msgstr "Мастер-пароль:"
#: code:addons/web/static/src/xml/base.xml:292
#, python-format
msgid "Change Master Password"
msgstr "Изменить главный пароль"
msgstr "Изменить Мастер-пароль"
#. module: web
#. openerp-web
@ -96,7 +96,7 @@ msgstr "Искать %(field)s в: %(value)s"
#: code:addons/web/static/src/js/chrome.js:559
#, python-format
msgid "Access Denied"
msgstr "Доступ запрещен"
msgstr "Доступ запрещён"
#. module: web
#. openerp-web
@ -134,7 +134,7 @@ msgstr "%(view_type)s вид"
#: code:addons/web/static/src/js/dates.js:53
#, python-format
msgid "'%s' is not a valid date"
msgstr "%s не является допустимой датой"
msgstr "'%s' - недопустимая дата"
#. module: web
#. openerp-web
@ -214,7 +214,7 @@ msgstr "Дата изменения:"
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr ""
"M2O поля поиска в настоящее время не работать с несколькими значениями по "
"Поля поиска M2O в настоящее время не работают с несколькими значениями по "
"умолчанию"
#. module: web
@ -335,7 +335,7 @@ msgstr "Настраиваемый фильтр"
#: code:addons/web/static/src/xml/base.xml:177
#, python-format
msgid "Duplicate Database"
msgstr "Дублровать базу данных"
msgstr "Дублировать базу данных"
#. module: web
#. openerp-web
@ -365,7 +365,7 @@ msgstr "Тип вида '%s' не поддерживается в one2many"
#: code:addons/web/static/src/js/view_list.js:2204
#, python-format
msgid "Download"
msgstr "Загрузить"
msgstr "Скачать"
#. module: web
#. openerp-web
@ -892,7 +892,7 @@ msgstr "Настройки"
#: code:addons/web/static/src/js/view_form.js:435
#, python-format
msgid "Wrong on change format: %s"
msgstr "Неправильный или измененный формат: %s"
msgstr "Ошибка при изменении формата: %s"
#. module: web
#. openerp-web
@ -1289,7 +1289,7 @@ msgstr "Группировать по: %s"
#: code:addons/web/static/src/js/view_form.js:154
#, python-format
msgid "No data provided."
msgstr "Нет предоставленных данных."
msgstr "Нет данных."
#. module: web
#. openerp-web
@ -1318,7 +1318,7 @@ msgstr "Вы должны выбрать хотя бы одну запись."
#: code:addons/web/static/src/js/coresetup.js:621
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
msgstr "Не уходите,<br />она по-прежнему загружается ..."
msgstr "Не уходите,<br />загрузка продолжается ..."
#. module: web
#. openerp-web
@ -1360,7 +1360,7 @@ msgstr "%(page)d/%(page_count)d"
#: code:addons/web/static/src/js/chrome.js:414
#, python-format
msgid "The confirmation does not match the password"
msgstr "Подтверждение должно совпадать с паролем"
msgstr "Подтверждение не совпадает с паролем"
#. module: web
#. openerp-web
@ -1441,7 +1441,7 @@ msgstr "Изменить по умолчанию:"
#: code:addons/web/static/src/xml/base.xml:189
#, python-format
msgid "Original database name:"
msgstr "Оригинальное название базы данных:"
msgstr "название исходной базы данных:"
#. module: web
#. openerp-web
@ -1451,7 +1451,7 @@ msgstr "Оригинальное название базы данных:"
#: code:addons/web/static/src/js/search.js:2119
#, python-format
msgid "is equal to"
msgstr "соответствует"
msgstr "равно"
#. module: web
#. openerp-web
@ -1694,7 +1694,7 @@ msgstr "Название новой базы данных:"
#: code:addons/web/static/src/js/chrome.js:411
#, python-format
msgid "Please enter your new password"
msgstr "Пожалуйста введите ваш новый пароль"
msgstr "Введите новый пароль"
#. module: web
#. openerp-web
@ -1772,7 +1772,7 @@ msgstr "Импорт не выполнен по причине:"
#: code:addons/web/static/src/xml/base.xml:561
#, python-format
msgid "JS Tests"
msgstr "JS тест"
msgstr "Тесты JS"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:26+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web
@ -227,7 +227,7 @@ msgstr "Widgettypen '%s' är inte implementerad"
#: code:addons/web/static/src/xml/base.xml:1626
#, python-format
msgid "Share with all users"
msgstr ""
msgstr "Dela med alla användare"
#. module: web
#. openerp-web
@ -305,7 +305,7 @@ msgstr "ungefär en månad sedan"
#: code:addons/web/static/src/xml/base.xml:1618
#, python-format
msgid "Custom Filters"
msgstr ""
msgstr "Anpassade filter"
#. module: web
#. openerp-web
@ -326,14 +326,14 @@ msgstr "OpenERP SA Company"
#: code:addons/web/static/src/js/search.js:1663
#, python-format
msgid "Custom Filter"
msgstr ""
msgstr "Anpassat filter"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:177
#, python-format
msgid "Duplicate Database"
msgstr ""
msgstr "Duplicerad databas"
#. module: web
#. openerp-web
@ -355,7 +355,7 @@ msgstr "Ändra lösenord"
#: code:addons/web/static/src/js/view_form.js:3528
#, python-format
msgid "View type '%s' is not supported in One2Many."
msgstr ""
msgstr "Vytyp '%s' stöds inte i One2Many."
#. module: web
#. openerp-web
@ -461,7 +461,7 @@ msgstr "innehåller"
#: code:addons/web/static/src/js/coresetup.js:623
#, python-format
msgid "Take a minute to get a coffee,<br />because it's loading..."
msgstr ""
msgstr "Ta en paus för en kaffe,<br/>därför den laddar..."
#. module: web
#. openerp-web
@ -538,7 +538,7 @@ msgstr "Felaktig operator %s i domän %s"
#: code:addons/web/static/src/js/formats.js:246
#, python-format
msgid "'%s' is not a correct float"
msgstr ""
msgstr "'%s' är inte en korrekt \"float\""
#. module: web
#. openerp-web
@ -643,7 +643,7 @@ msgstr "Modell %s fält"
#: code:addons/web/static/src/js/view_list.js:906
#, python-format
msgid "Setting 'id' attribute on existing record %s"
msgstr ""
msgstr "Anger 'id' egenskapen på existerande post %s"
#. module: web
#. openerp-web
@ -695,7 +695,7 @@ msgstr "Ditt kontos inställda tidszon stämmer ej med webbläsarens tidszon."
#: code:addons/web/static/src/js/view_form.js:1237
#, python-format
msgid "Field '%s' specified in view could not be found."
msgstr ""
msgstr "Fält '%s' angivet i vyn kan inte hittas"
#. module: web
#. openerp-web
@ -723,7 +723,7 @@ msgstr ""
#: code:addons/web/static/src/js/chrome.js:503
#, python-format
msgid "The database has been duplicated."
msgstr ""
msgstr "Databasen har duplicerats"
#. module: web
#. openerp-web
@ -791,6 +791,9 @@ msgid ""
"\n"
"Are you sure you want to leave this page ?"
msgstr ""
"Varning, posten har ändrats och dina ändringar kommer att försvinna\n"
"\n"
"Är du säker på att du vill lämna sidan?"
#. module: web
#. openerp-web
@ -818,14 +821,14 @@ msgstr "Avgränsare:"
#: code:addons/web/static/src/xml/base.xml:484
#, python-format
msgid "Browser's timezone"
msgstr ""
msgstr "Webbläsarens tidszon"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1623
#, python-format
msgid "Filter name"
msgstr ""
msgstr "Filternamn"
#. module: web
#. openerp-web
@ -870,7 +873,7 @@ msgstr "Kan inte skicka e-post till felaktig adress"
#: code:addons/web/static/src/xml/base.xml:658
#, python-format
msgid "Add..."
msgstr ""
msgstr "Lägg till..."
#. module: web
#. openerp-web
@ -884,7 +887,7 @@ msgstr "Inställningar"
#: code:addons/web/static/src/js/view_form.js:435
#, python-format
msgid "Wrong on change format: %s"
msgstr ""
msgstr "Felaktig ändring av format: %s"
#. module: web
#. openerp-web
@ -892,14 +895,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:203
#, python-format
msgid "Drop Database"
msgstr ""
msgstr "Ta bort databas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:488
#, python-format
msgid "Click here to change your user's timezone."
msgstr ""
msgstr "Klicka här för att ändra din användares tidzon"
#. module: web
#. openerp-web
@ -913,7 +916,7 @@ msgstr "Modifierare:"
#: code:addons/web/static/src/xml/base.xml:649
#, python-format
msgid "Delete this attachment"
msgstr ""
msgstr "Ta bort denna bilaga"
#. module: web
#. openerp-web
@ -931,7 +934,7 @@ msgstr "Spara"
#: code:addons/web/static/src/xml/base.xml:370
#, python-format
msgid "More"
msgstr ""
msgstr "Fler"
#. module: web
#. openerp-web
@ -945,14 +948,14 @@ msgstr "Användarnamn"
#: code:addons/web/static/src/js/chrome.js:503
#, python-format
msgid "Duplicating database"
msgstr ""
msgstr "Duplicerar databas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:585
#, python-format
msgid "Password has been changed successfully"
msgstr ""
msgstr "Lösenordet har ändrats"
#. module: web
#. openerp-web
@ -1014,7 +1017,7 @@ msgstr "Spara fältlista"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:5
#, python-format
msgid "Start"
msgstr ""
msgstr "Start"
#. module: web
#. openerp-web
@ -1035,14 +1038,14 @@ msgstr "Datum skapad:"
#: code:addons/web/controllers/main.py:878
#, python-format
msgid "Error, password not changed !"
msgstr ""
msgstr "Fel! Lösenord ej ändrat!"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:4981
#, python-format
msgid "The selected file exceed the maximum file size of %s."
msgstr ""
msgstr "Vald fil överstiger maximal filstorlek på %s."
#. module: web
#. openerp-web
@ -1090,14 +1093,14 @@ msgstr "Säkerhetskopia"
#: code:addons/web/static/src/js/dates.js:80
#, python-format
msgid "'%s' is not a valid time"
msgstr ""
msgstr "'%s' är inte en giltig tid"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:278
#, python-format
msgid "'%s' is not a correct date"
msgstr ""
msgstr "'%s' är inte ett giltigt datum"
#. module: web
#. openerp-web
@ -1111,7 +1114,7 @@ msgstr "(ingen rubrik)"
#: code:addons/web/static/src/js/coresetup.js:596
#, python-format
msgid "%d days ago"
msgstr ""
msgstr "%d dagar sedan"
#. module: web
#. openerp-web
@ -1151,7 +1154,7 @@ msgstr "Senast ändrad av:"
#: code:addons/web/static/src/xml/base.xml:492
#, python-format
msgid "Timezone mismatch"
msgstr ""
msgstr "Hopblandning av tidszoner"
#. module: web
#. openerp-web
@ -1198,7 +1201,7 @@ msgstr ""
#: code:addons/web/static/src/js/coresetup.js:598
#, python-format
msgid "%d months ago"
msgstr ""
msgstr "%d månader sedan"
#. module: web
#. openerp-web
@ -1219,7 +1222,7 @@ msgstr "Lägg till avancerat filter"
#: code:addons/web/controllers/main.py:871
#, python-format
msgid "The new password and its confirmation must be identical."
msgstr ""
msgstr "Det nya lösenordet och bekräftelsen måste vara lika."
#. module: web
#. openerp-web
@ -1227,14 +1230,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:266
#, python-format
msgid "Restore Database"
msgstr ""
msgstr "Återställ databas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:702
#, python-format
msgid "Login"
msgstr ""
msgstr "Logga in"
#. module: web
#. openerp-web
@ -1263,21 +1266,21 @@ msgstr "Exporttyp:"
#: code:addons/web/static/src/xml/base.xml:428
#, python-format
msgid "Log out"
msgstr ""
msgstr "Logga ut"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:1192
#, python-format
msgid "Group by: %s"
msgstr ""
msgstr "Grupperad på: %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:154
#, python-format
msgid "No data provided."
msgstr ""
msgstr "Inga data angivna"
#. module: web
#. openerp-web
@ -1306,7 +1309,7 @@ msgstr "Du måste välja minst en post."
#: code:addons/web/static/src/js/coresetup.js:621
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
msgstr ""
msgstr "Lämna inte skärmen än,<br />det laddar fortfarande..."
#. module: web
#. openerp-web
@ -1348,28 +1351,28 @@ msgstr "%(page)d/%(page_count)d"
#: code:addons/web/static/src/js/chrome.js:414
#, python-format
msgid "The confirmation does not match the password"
msgstr ""
msgstr "Bekräftelsen matchar inte lösenordet"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:463
#, python-format
msgid "Edit Company data"
msgstr ""
msgstr "Redigera företagsdata"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5017
#, python-format
msgid "Save As..."
msgstr ""
msgstr "Spara som…"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5138
#, python-format
msgid "Could not display the selected image."
msgstr ""
msgstr "Kunde inte visa utvald bild."
#. module: web
#. openerp-web
@ -1407,7 +1410,7 @@ msgstr "1. Importera en .CSV-fil"
#: code:addons/web/static/src/js/chrome.js:702
#, python-format
msgid "No database selected !"
msgstr ""
msgstr "Ingen databas vald!"
#. module: web
#. openerp-web
@ -1428,7 +1431,7 @@ msgstr "Byt standardvärde:"
#: code:addons/web/static/src/xml/base.xml:189
#, python-format
msgid "Original database name:"
msgstr ""
msgstr "Ursprungligt databasnamn"
#. module: web
#. openerp-web
@ -1452,7 +1455,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1637
#, python-format
msgid "Advanced Search"
msgstr ""
msgstr "Avancerad sökning"
#. module: web
#. openerp-web
@ -1467,6 +1470,7 @@ msgstr "Bekräfta nytt huvudlösenord:"
#, python-format
msgid "Maybe you should consider reloading the application by pressing F5..."
msgstr ""
"Du kanske skulle överväga att återladda applikationen genom att trycka F5..."
#. module: web
#. openerp-web
@ -1498,7 +1502,7 @@ msgstr "Importalternativ"
#: code:addons/web/static/src/js/view_form.js:3023
#, python-format
msgid "Add %s"
msgstr ""
msgstr "Lägg till %s"
#. module: web
#. openerp-web
@ -1522,7 +1526,7 @@ msgstr "Stäng"
#, python-format
msgid ""
"You may not believe it,<br />but the application is actually loading..."
msgstr ""
msgstr "Du kanske inte tror det, <br />men applikationen laddar faktiskt..."
#. module: web
#. openerp-web
@ -1536,7 +1540,7 @@ msgstr "CSV Fil:"
#: code:addons/web/static/src/js/search.js:1879
#, python-format
msgid "Advanced"
msgstr ""
msgstr "Avancerat"
#. module: web
#. openerp-web
@ -1549,14 +1553,14 @@ msgstr "Träd"
#: code:addons/web/controllers/main.py:793
#, python-format
msgid "Could not drop database !"
msgstr ""
msgstr "Kunde inte ta bort databas!"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:231
#, python-format
msgid "'%s' is not a correct integer"
msgstr ""
msgstr "'%s' är inte ett korrekt heltal"
#. module: web
#. openerp-web
@ -1577,21 +1581,21 @@ msgstr "Okänt fält %s i domän %s"
#: code:addons/web/static/src/js/views.js:1546
#, python-format
msgid "Node [%s] is not a JSONified XML node"
msgstr ""
msgstr "Nod [%s] är inte en JSONifierad XML nod"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1454
#, python-format
msgid "Advanced Search..."
msgstr ""
msgstr "Avancerad sökning..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "Dropping database"
msgstr ""
msgstr "Tar bort databas"
#. module: web
#. openerp-web
@ -1642,14 +1646,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1697
#, python-format
msgid "Import-Compatible Export"
msgstr ""
msgstr "Importkompatibel export"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:600
#, python-format
msgid "%d years ago"
msgstr ""
msgstr "%d år sedan"
#. module: web
#. openerp-web
@ -1678,14 +1682,14 @@ msgstr "Nytt databasnamn:"
#: code:addons/web/static/src/js/chrome.js:411
#, python-format
msgid "Please enter your new password"
msgstr ""
msgstr "Var god ange ditt nya lösenord"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5017
#, python-format
msgid "The field is empty, there's nothing to save !"
msgstr ""
msgstr "Fältet är tomt, det finns ingenting att spara!"
#. module: web
#. openerp-web
@ -1713,7 +1717,7 @@ msgstr "Rader att hoppa över"
#: code:addons/web/static/src/js/view_form.js:2945
#, python-format
msgid "Create \"<strong>%s</strong>\""
msgstr ""
msgstr "Skapa \"<strong>%s</strong>\""
#. module: web
#. openerp-web
@ -1756,7 +1760,7 @@ msgstr "Importern misslyckades på grund av:"
#: code:addons/web/static/src/xml/base.xml:561
#, python-format
msgid "JS Tests"
msgstr ""
msgstr "JS tester"
#. module: web
#. openerp-web
@ -1770,7 +1774,7 @@ msgstr "Spara som:"
#: code:addons/web/static/src/js/search.js:1024
#, python-format
msgid "Filter on: %s"
msgstr ""
msgstr "Filter på: %s"
#. module: web
#. openerp-web
@ -1792,7 +1796,7 @@ msgstr "Visa fält"
#: code:addons/web/static/src/xml/base.xml:348
#, python-format
msgid "Confirm New Password:"
msgstr ""
msgstr "Bekräfta nytt lösenord:"
#. module: web
#. openerp-web
@ -1850,7 +1854,7 @@ msgstr "OpenERP"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:8
#, python-format
msgid "Stop"
msgstr ""
msgstr "Stoppa"
#. module: web
#. openerp-web
@ -1874,7 +1878,7 @@ msgstr "Laddar upp..."
#: code:addons/web/static/src/xml/base.xml:1874
#, python-format
msgid "Name:"
msgstr ""
msgstr "Namn:"
#. module: web
#. openerp-web
@ -1888,7 +1892,7 @@ msgstr "Om"
#: code:addons/web/static/src/xml/base.xml:1457
#, python-format
msgid "Search Again"
msgstr ""
msgstr "Sök igen"
#. module: web
#. openerp-web
@ -1921,13 +1925,14 @@ msgid ""
"Grouping on field '%s' is not possible because that field does not appear in "
"the list view."
msgstr ""
"Att gruppera på fält '%s' är inte möjligt då detta fält inte finns i listvyn."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:559
#, python-format
msgid "Set Defaults"
msgstr ""
msgstr "Ställ in standardvärden"
#. module: web
#. openerp-web
@ -1970,7 +1975,7 @@ msgstr "Typ:"
#: code:addons/web/static/src/js/chrome.js:560
#, python-format
msgid "Incorrect super-administrator password"
msgstr ""
msgstr "Ogiltigt super-administrator lösenord"
#. module: web
#. openerp-web
@ -1985,14 +1990,14 @@ msgstr "Objekt:"
#: code:addons/web/static/src/js/chrome.js:343
#, python-format
msgid "Loading"
msgstr ""
msgstr "Laddar"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:599
#, python-format
msgid "about a year ago"
msgstr ""
msgstr "ungefär ett år sedan"
#. module: web
#. openerp-web
@ -2012,13 +2017,15 @@ msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
msgstr ""
"Denna typ av fält '%s' måste var ett many2many fält med en relation till "
"'ir.attachment' modellen."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:594
#, python-format
msgid "%d hours ago"
msgstr ""
msgstr "%d timmar sedan"
#. module: web
#. openerp-web
@ -2033,7 +2040,7 @@ msgstr "Lägg till: "
#: code:addons/web/static/src/xml/base.xml:1879
#, python-format
msgid "Quick Add"
msgstr ""
msgstr "Lägg till snabbt"
#. module: web
#. openerp-web
@ -2060,7 +2067,7 @@ msgstr "Ok"
#: code:addons/web/static/src/js/views.js:1237
#, python-format
msgid "Uploading..."
msgstr ""
msgstr "Överför…"
#. module: web
#. openerp-web
@ -2074,7 +2081,7 @@ msgstr "Ladda demodata:"
#: code:addons/web/static/src/xml/base.xml:637
#, python-format
msgid "Created by :"
msgstr ""
msgstr "Skapad av:"
#. module: web
#. openerp-web
@ -2082,7 +2089,7 @@ msgstr ""
#: code:addons/web/static/src/js/dates.js:26
#, python-format
msgid "'%s' is not a valid datetime"
msgstr ""
msgstr "'%s' är inte en giltig datum/tid"
#. module: web
#. openerp-web
@ -2127,14 +2134,14 @@ msgstr "är sann"
#: code:addons/web/static/src/js/view_form.js:4030
#, python-format
msgid "Add an item"
msgstr ""
msgstr "Lägg till en post"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1621
#, python-format
msgid "Save current filter"
msgstr ""
msgstr "Spara aktuellt filter"
#. module: web
#. openerp-web
@ -2162,14 +2169,14 @@ msgstr "Hämta \"%s\""
#: code:addons/web/static/src/js/view_form.js:325
#, python-format
msgid "New"
msgstr ""
msgstr "Ny"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1777
#, python-format
msgid "Can't convert value %s to context"
msgstr ""
msgstr "Kan inte konvertera värdet %s i sammanhanget"
#. module: web
#. openerp-web
@ -2235,34 +2242,34 @@ msgstr "är falsk"
#: code:addons/web/static/src/xml/base.xml:426
#, python-format
msgid "About OpenERP"
msgstr ""
msgstr "Om OpenERP"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:301
#, python-format
msgid "'%s' is not a correct date, datetime nor time"
msgstr ""
msgstr "'%s' är inte ett korrekt datum , datum/tid eller tid"
#. module: web
#: code:addons/web/controllers/main.py:1307
#, python-format
msgid "No content found for field '%s' on '%s:%s'"
msgstr ""
msgstr "Inget innehåll funnet för fält '%s' på '%s:%s'"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:322
#, python-format
msgid "Database Management"
msgstr ""
msgstr "Databashantering"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5138
#, python-format
msgid "Image"
msgstr ""
msgstr "Bild"
#. module: web
#. openerp-web
@ -2295,7 +2302,7 @@ msgstr "inte ett korrekt heltal"
#: code:addons/web/static/src/xml/base.xml:1648
#, python-format
msgid "or"
msgstr ""
msgstr "eller"
#. module: web
#. openerp-web
@ -2309,7 +2316,7 @@ msgstr "Nej"
#: code:addons/web/static/src/js/formats.js:313
#, python-format
msgid "'%s' is not convertible to date, datetime nor time"
msgstr ""
msgstr "'%s' är inte konverterbart till datum, datum/tid eller tid"
#. module: web
#. openerp-web
@ -2327,21 +2334,21 @@ msgstr "Duplicera"
#: code:addons/web/static/src/xml/base.xml:1419
#, python-format
msgid "Discard"
msgstr ""
msgstr "Ignorera"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1642
#, python-format
msgid "Add a condition"
msgstr ""
msgstr "Lägg till ett villkor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:619
#, python-format
msgid "Still loading..."
msgstr ""
msgstr "Laddar fortfarande..."
#. module: web
#. openerp-web
@ -2355,7 +2362,7 @@ msgstr "Felaktigt värde för fält %(fieldname)s: [%(value)s] är %(message)s"
#: code:addons/web/static/src/js/view_form.js:3926
#, python-format
msgid "The o2m record must be saved before an action can be used"
msgstr ""
msgstr "o2m posten måste sparas innan en händelse kan användas"
#. module: web
#. openerp-web
@ -2369,7 +2376,7 @@ msgstr "Säkerhetskopierad"
#: code:addons/web/static/src/xml/base.xml:1628
#, python-format
msgid "Use by default"
msgstr ""
msgstr "Använd som standard"
#. module: web
#. openerp-web
@ -2390,7 +2397,7 @@ msgstr "aktiverad från sökvyn"
#: code:addons/web/static/src/js/search.js:1079
#, python-format
msgid "Filter"
msgstr ""
msgstr "Filter"
#. module: web
#. openerp-web
@ -2432,7 +2439,7 @@ msgstr "Ändra arbetsflöde"
#: code:addons/web/static/src/js/views.js:1246
#, python-format
msgid "Do you really want to delete this attachment ?"
msgstr ""
msgstr "Vill du verkligen ta bort denna bilaga"
#. module: web
#. openerp-web
@ -2453,21 +2460,21 @@ msgstr "Fält:"
#: code:addons/web/static/src/xml/base.xml:642
#, python-format
msgid "Modified by :"
msgstr ""
msgstr "Ändrad av:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "The database %s has been dropped"
msgstr ""
msgstr "Datbasen %s har tagits bort"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:482
#, python-format
msgid "User's timezone"
msgstr ""
msgstr "Användarens tidszon"
#. module: web
#. openerp-web
@ -2482,7 +2489,7 @@ msgstr "Klientfel"
#: code:addons/web/static/src/js/views.js:1073
#, python-format
msgid "Print"
msgstr ""
msgstr "Skriv ut"
#. module: web
#. openerp-web
@ -2497,6 +2504,7 @@ msgstr "Special:"
msgid ""
"The old password you provided is incorrect, your password was not changed."
msgstr ""
"Det gamla lösenordet du angav är ej korrekt, ditt lösenord ändrades inte."
#. module: web
#. openerp-web
@ -2524,7 +2532,7 @@ msgstr "Spara och stäng"
#: code:addons/web/static/src/js/view_form.js:2932
#, python-format
msgid "Search More..."
msgstr ""
msgstr "Sök flera..."
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web
#. openerp-web

View File

@ -1,12 +1,11 @@
// Underscore.string
// (c) 2010 Esa-Matti Suuronen <esa-matti aet suuronen dot org>
// Underscore.strings is freely distributable under the terms of the MIT license.
// Documentation: https://github.com/epeli/underscore.string
// Some code is borrowed from MooTools and Alexandru Marasteanu.
// Underscore.string
// (c) 2010 Esa-Matti Suuronen <esa-matti aet suuronen dot org>
// Underscore.string is freely distributable under the terms of the MIT license.
// Documentation: https://github.com/epeli/underscore.string
// Some code is borrowed from MooTools and Alexandru Marasteanu.
// Version '2.3.2'
// Version 2.2.0rc
(function(root){
!function(root, String){
'use strict';
// Defining helper functions.
@ -16,36 +15,51 @@
var nativeTrimLeft = String.prototype.trimLeft;
var parseNumber = function(source) { return source * 1 || 0; };
var strRepeat = function(str, qty, separator){
// ~~var — is the fastest available way to convert anything to Integer in javascript.
// We'll use it extensively in this lib.
str += ''; qty = ~~qty;
for (var repeat = []; qty > 0; repeat[--qty] = str) {}
return repeat.join(separator == null ? '' : separator);
};
var slice = function(a){
return Array.prototype.slice.call(a);
};
var defaultToWhiteSpace = function(characters){
if (characters != null) {
return '[' + _s.escapeRegExp(''+characters) + ']';
var strRepeat = function(str, qty){
if (qty < 1) return '';
var result = '';
while (qty > 0) {
if (qty & 1) result += str;
qty >>= 1, str += str;
}
return '\\s';
return result;
};
var slice = [].slice;
var defaultToWhiteSpace = function(characters) {
if (characters == null)
return '\\s';
else if (characters.source)
return characters.source;
else
return '[' + _s.escapeRegExp(characters) + ']';
};
// Helper for toBoolean
function boolMatch(s, matchers) {
var i, matcher, down = s.toLowerCase();
matchers = [].concat(matchers);
for (i = 0; i < matchers.length; i += 1) {
matcher = matchers[i];
if (!matcher) continue;
if (matcher.test && matcher.test(s)) return true;
if (matcher.toLowerCase() === down) return true;
}
}
var escapeChars = {
lt: '<',
gt: '>',
quot: '"',
apos: "'",
amp: '&'
amp: '&',
apos: "'"
};
var reversedEscapeChars = {};
for(var key in escapeChars){ reversedEscapeChars[escapeChars[key]] = key; }
for(var key in escapeChars) reversedEscapeChars[escapeChars[key]] = key;
reversedEscapeChars["'"] = '#39';
// sprintf() for JavaScript 0.7-beta1
// http://www.diveintojavascript.com/projects/javascript-sprintf
@ -175,28 +189,28 @@
var _s = {
VERSION: '2.2.0rc',
VERSION: '2.3.0',
isBlank: function(str){
if (str == null) str = '';
return (/^\s*$/).test(str);
},
stripTags: function(str){
return (''+str).replace(/<\/?[^>]+>/g, '');
if (str == null) return '';
return String(str).replace(/<\/?[^>]+>/g, '');
},
capitalize : function(str) {
str += '';
return str.charAt(0).toUpperCase() + str.substring(1);
capitalize : function(str){
str = str == null ? '' : String(str);
return str.charAt(0).toUpperCase() + str.slice(1);
},
chop: function(str, step){
str = str+'';
step = ~~step || str.length;
var arr = [];
for (var i = 0; i < str.length; i += step)
arr.push(str.slice(i,i + step));
return arr;
if (str == null) return [];
str = String(str);
step = ~~step;
return step > 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str];
},
clean: function(str){
@ -204,22 +218,47 @@
},
count: function(str, substr){
str += ''; substr += '';
return str.split(substr).length - 1;
if (str == null || substr == null) return 0;
str = String(str);
substr = String(substr);
var count = 0,
pos = 0,
length = substr.length;
while (true) {
pos = str.indexOf(substr, pos);
if (pos === -1) break;
count++;
pos += length;
}
return count;
},
chars: function(str) {
return (''+str).split('');
if (str == null) return [];
return String(str).split('');
},
swapCase: function(str) {
if (str == null) return '';
return String(str).replace(/\S/g, function(c){
return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase();
});
},
escapeHTML: function(str) {
return (''+str).replace(/[&<>"']/g, function(match){ return '&' + reversedEscapeChars[match] + ';'; });
if (str == null) return '';
return String(str).replace(/[&<>"']/g, function(m){ return '&' + reversedEscapeChars[m] + ';'; });
},
unescapeHTML: function(str) {
return (''+str).replace(/\&([^;]+);/g, function(entity, entityCode){
if (str == null) return '';
return String(str).replace(/\&([^;]+);/g, function(entity, entityCode){
var match;
if (entityCode in escapeChars) {
return escapeChars[entityCode];
} else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
@ -233,31 +272,8 @@
},
escapeRegExp: function(str){
// From MooTools core 1.2.4
return str.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
},
insert: function(str, i, substr){
var arr = _s.chars(str);
arr.splice(~~i, 0, ''+substr);
return arr.join('');
},
include: function(str, needle){
return !!~(''+str).indexOf(needle);
},
join: function() {
var args = slice(arguments);
return args.join(args.shift());
},
lines: function(str) {
return (''+str).split("\n");
},
reverse: function(str){
return _s.chars(str).reverse().join('');
if (str == null) return '';
return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
},
splice: function(str, i, howmany, substr){
@ -266,31 +282,62 @@
return arr.join('');
},
insert: function(str, i, substr){
return _s.splice(str, i, 0, substr);
},
include: function(str, needle){
if (needle === '') return true;
if (str == null) return false;
return String(str).indexOf(needle) !== -1;
},
join: function() {
var args = slice.call(arguments),
separator = args.shift();
if (separator == null) separator = '';
return args.join(separator);
},
lines: function(str) {
if (str == null) return [];
return String(str).split("\n");
},
reverse: function(str){
return _s.chars(str).reverse().join('');
},
startsWith: function(str, starts){
str += ''; starts += '';
return str.length >= starts.length && str.substring(0, starts.length) === starts;
if (starts === '') return true;
if (str == null || starts == null) return false;
str = String(str); starts = String(starts);
return str.length >= starts.length && str.slice(0, starts.length) === starts;
},
endsWith: function(str, ends){
str += ''; ends += '';
return str.length >= ends.length && str.substring(str.length - ends.length) === ends;
if (ends === '') return true;
if (str == null || ends == null) return false;
str = String(str); ends = String(ends);
return str.length >= ends.length && str.slice(str.length - ends.length) === ends;
},
succ: function(str){
str += '';
var arr = _s.chars(str);
arr.splice(str.length-1, 1, String.fromCharCode(str.charCodeAt(str.length-1) + 1));
return arr.join('');
if (str == null) return '';
str = String(str);
return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length-1) + 1);
},
titleize: function(str){
return (''+str).replace(/\b./g, function(ch){ return ch.toUpperCase(); });
if (str == null) return '';
str = String(str).toLowerCase();
return str.replace(/(?:^|\s|-)\S/g, function(c){ return c.toUpperCase(); });
},
camelize: function(str){
return _s.trim(str).replace(/[-_\s]+(.)?/g, function(match, chr){
return chr && chr.toUpperCase();
});
return _s.trim(str).replace(/[-_\s]+(.)?/g, function(match, c){ return c ? c.toUpperCase() : ""; });
},
underscored: function(str){
@ -298,45 +345,41 @@
},
dasherize: function(str){
return _s.trim(str).replace(/[_\s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase();
return _s.trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase();
},
classify: function(str){
str += '';
return _s.titleize(str.replace(/_/g, ' ')).replace(/\s/g, '')
return _s.titleize(String(str).replace(/[\W_]/g, ' ')).replace(/\s/g, '');
},
humanize: function(str){
return _s.capitalize(this.underscored(str).replace(/_id$/,'').replace(/_/g, ' '));
return _s.capitalize(_s.underscored(str).replace(/_id$/,'').replace(/_/g, ' '));
},
trim: function(str, characters){
str += '';
if (!characters && nativeTrim) { return nativeTrim.call(str); }
if (str == null) return '';
if (!characters && nativeTrim) return nativeTrim.call(str);
characters = defaultToWhiteSpace(characters);
return str.replace(new RegExp('\^' + characters + '+|' + characters + '+$', 'g'), '');
return String(str).replace(new RegExp('\^' + characters + '+|' + characters + '+$', 'g'), '');
},
ltrim: function(str, characters){
str+='';
if (!characters && nativeTrimLeft) {
return nativeTrimLeft.call(str);
}
if (str == null) return '';
if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str);
characters = defaultToWhiteSpace(characters);
return str.replace(new RegExp('^' + characters + '+'), '');
return String(str).replace(new RegExp('^' + characters + '+'), '');
},
rtrim: function(str, characters){
str+='';
if (!characters && nativeTrimRight) {
return nativeTrimRight.call(str);
}
if (str == null) return '';
if (!characters && nativeTrimRight) return nativeTrimRight.call(str);
characters = defaultToWhiteSpace(characters);
return str.replace(new RegExp(characters + '+$'), '');
return String(str).replace(new RegExp(characters + '+$'), '');
},
truncate: function(str, length, truncateStr){
str += ''; truncateStr = truncateStr || '...';
if (str == null) return '';
str = String(str); truncateStr = truncateStr || '...';
length = ~~length;
return str.length > length ? str.slice(0, length) + truncateStr : str;
},
@ -344,57 +387,53 @@
/**
* _s.prune: a more elegant version of truncate
* prune extra chars, never leaving a half-chopped word.
* @author github.com/sergiokas
* @author github.com/rwz
*/
prune: function(str, length, pruneStr){
str += ''; length = ~~length;
pruneStr = pruneStr != null ? ''+pruneStr : '...';
var pruned, borderChar, template = str.replace(/\W/g, function(ch){
return (ch.toUpperCase() !== ch.toLowerCase()) ? 'A' : ' ';
});
borderChar = template.charAt(length);
pruned = template.slice(0, length);
// Check if we're in the middle of a word
if (borderChar && borderChar.match(/\S/))
pruned = pruned.replace(/\s\S+$/, '');
pruned = _s.rtrim(pruned);
return (pruned+pruneStr).length > str.length ? str : str.substring(0, pruned.length)+pruneStr;
if (str == null) return '';
str = String(str); length = ~~length;
pruneStr = pruneStr != null ? String(pruneStr) : '...';
if (str.length <= length) return str;
var tmpl = function(c){ return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; },
template = str.slice(0, length+1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA'
if (template.slice(template.length-2).match(/\w\w/))
template = template.replace(/\s*\S+$/, '');
else
template = _s.rtrim(template.slice(0, template.length-1));
return (template+pruneStr).length > str.length ? str : str.slice(0, template.length)+pruneStr;
},
words: function(str, delimiter) {
if (_s.isBlank(str)) return [];
return _s.trim(str, delimiter).split(delimiter || /\s+/);
},
pad: function(str, length, padStr, type) {
str += '';
str = str == null ? '' : String(str);
length = ~~length;
var padlen = 0;
length = ~~length;
if (!padStr) {
if (!padStr)
padStr = ' ';
} else if (padStr.length > 1) {
else if (padStr.length > 1)
padStr = padStr.charAt(0);
}
switch(type) {
case 'right':
padlen = (length - str.length);
padlen = length - str.length;
return str + strRepeat(padStr, padlen);
case 'both':
padlen = (length - str.length);
return strRepeat(padStr, Math.ceil(padlen/2)) +
str +
strRepeat(padStr, Math.floor(padlen/2));
padlen = length - str.length;
return strRepeat(padStr, Math.ceil(padlen/2)) + str
+ strRepeat(padStr, Math.floor(padlen/2));
default: // 'left'
padlen = (length - str.length);
padlen = length - str.length;
return strRepeat(padStr, padlen) + str;
}
},
@ -419,76 +458,185 @@
},
toNumber: function(str, decimals) {
str += '';
var num = parseNumber(parseNumber(str).toFixed(~~decimals));
return num === 0 && !str.match(/^0+$/) ? Number.NaN : num;
if (!str) return 0;
str = _s.trim(str);
if (!str.match(/^-?\d+(?:\.\d+)?$/)) return NaN;
return parseNumber(parseNumber(str).toFixed(~~decimals));
},
numberFormat : function(number, dec, dsep, tsep) {
if (isNaN(number) || number == null) return '';
number = number.toFixed(~~dec);
tsep = typeof tsep == 'string' ? tsep : ',';
var parts = number.split('.'), fnums = parts[0],
decimals = parts[1] ? (dsep || '.') + parts[1] : '';
return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals;
},
strRight: function(str, sep){
str += ''; sep = sep != null ? ''+sep : sep;
if (str == null) return '';
str = String(str); sep = sep != null ? String(sep) : sep;
var pos = !sep ? -1 : str.indexOf(sep);
return ~pos ? str.slice(pos+sep.length, str.length) : str;
},
strRightBack: function(str, sep){
str += ''; sep = sep != null ? ''+sep : sep;
if (str == null) return '';
str = String(str); sep = sep != null ? String(sep) : sep;
var pos = !sep ? -1 : str.lastIndexOf(sep);
return ~pos ? str.slice(pos+sep.length, str.length) : str;
},
strLeft: function(str, sep){
str += ''; sep = sep != null ? ''+sep : sep;
if (str == null) return '';
str = String(str); sep = sep != null ? String(sep) : sep;
var pos = !sep ? -1 : str.indexOf(sep);
return ~pos ? str.slice(0, pos) : str;
},
strLeftBack: function(str, sep){
if (str == null) return '';
str += ''; sep = sep != null ? ''+sep : sep;
var pos = str.lastIndexOf(sep);
return ~pos ? str.slice(0, pos) : str;
},
toSentence: function(array, separator, lastSeparator) {
separator || (separator = ', ');
lastSeparator || (lastSeparator = ' and ');
var length = array.length, str = '';
toSentence: function(array, separator, lastSeparator, serial) {
separator = separator || ', ';
lastSeparator = lastSeparator || ' and ';
var a = array.slice(), lastMember = a.pop();
for (var i = 0; i < length; i++) {
str += array[i];
if (i === (length - 2)) { str += lastSeparator; }
else if (i < (length - 1)) { str += separator; }
}
if (array.length > 2 && serial) lastSeparator = _s.rtrim(separator) + lastSeparator;
return str;
return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember;
},
toSentenceSerial: function() {
var args = slice.call(arguments);
args[3] = true;
return _s.toSentence.apply(_s, args);
},
slugify: function(str) {
var from = "ąàáäâãćęèéëêìíïîłńòóöôõùúüûñçżź",
to = "aaaaaaceeeeeiiiilnooooouuuunczz",
if (str == null) return '';
var from = "ąàáäâãåæăćęèéëêìíïîłńòóöôõøśșțùúüûñçżź",
to = "aaaaaaaaaceeeeeiiiilnoooooosstuuuunczz",
regex = new RegExp(defaultToWhiteSpace(from), 'g');
str = (''+str).toLowerCase();
str = str.replace(regex, function(ch){
var index = from.indexOf(ch);
str = String(str).toLowerCase().replace(regex, function(c){
var index = from.indexOf(c);
return to.charAt(index) || '-';
});
return _s.trim(str.replace(/[^\w\s-]/g, '').replace(/[-\s]+/g, '-'), '-');
return _s.dasherize(str.replace(/[^\w\s-]/g, ''));
},
surround: function(str, wrapper) {
return [wrapper, str, wrapper].join('');
},
quote: function(str, quoteChar) {
return _s.surround(str, quoteChar || '"');
},
unquote: function(str, quoteChar) {
quoteChar = quoteChar || '"';
if (str[0] === quoteChar && str[str.length-1] === quoteChar)
return str.slice(1,str.length-1);
else return str;
},
exports: function() {
var result = {};
for (var prop in this) {
if (!this.hasOwnProperty(prop) || ~_s.words('include contains reverse').indexOf(prop)) continue;
if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse)$/)) continue;
result[prop] = this[prop];
}
return result;
},
repeat: strRepeat
repeat: function(str, qty, separator){
if (str == null) return '';
qty = ~~qty;
// using faster implementation if separator is not needed;
if (separator == null) return strRepeat(String(str), qty);
// this one is about 300x slower in Google Chrome
for (var repeat = []; qty > 0; repeat[--qty] = str) {}
return repeat.join(separator);
},
naturalCmp: function(str1, str2){
if (str1 == str2) return 0;
if (!str1) return -1;
if (!str2) return 1;
var cmpRegex = /(\.\d+)|(\d+)|(\D+)/g,
tokens1 = String(str1).toLowerCase().match(cmpRegex),
tokens2 = String(str2).toLowerCase().match(cmpRegex),
count = Math.min(tokens1.length, tokens2.length);
for(var i = 0; i < count; i++) {
var a = tokens1[i], b = tokens2[i];
if (a !== b){
var num1 = parseInt(a, 10);
if (!isNaN(num1)){
var num2 = parseInt(b, 10);
if (!isNaN(num2) && num1 - num2)
return num1 - num2;
}
return a < b ? -1 : 1;
}
}
if (tokens1.length === tokens2.length)
return tokens1.length - tokens2.length;
return str1 < str2 ? -1 : 1;
},
levenshtein: function(str1, str2) {
if (str1 == null && str2 == null) return 0;
if (str1 == null) return String(str2).length;
if (str2 == null) return String(str1).length;
str1 = String(str1); str2 = String(str2);
var current = [], prev, value;
for (var i = 0; i <= str2.length; i++)
for (var j = 0; j <= str1.length; j++) {
if (i && j)
if (str1.charAt(j - 1) === str2.charAt(i - 1))
value = prev;
else
value = Math.min(current[j], current[j - 1], prev) + 1;
else
value = i + j;
prev = current[j];
current[j] = value;
}
return current.pop();
},
toBoolean: function(str, trueValues, falseValues) {
if (typeof str === "number") str = "" + str;
if (typeof str !== "string") return !!str;
str = _s.trim(str);
if (boolMatch(str, trueValues || ["true", "1"])) return true;
if (boolMatch(str, falseValues || ["false", "0"])) return false;
}
};
// Aliases
@ -500,26 +648,26 @@
_s.rjust = _s.lpad;
_s.ljust = _s.rpad;
_s.contains = _s.include;
_s.q = _s.quote;
_s.toBool = _s.toBoolean;
// Exporting
// CommonJS module is defined
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
// Export module
if (typeof module !== 'undefined' && module.exports)
module.exports = _s;
}
exports._s = _s;
} else if (typeof define === 'function' && define.amd) {
// Register as a named module with AMD.
define('underscore.string', function() {
return _s;
});
} else {
// Integrate with Underscore.js if defined
// or create our own underscore object.
root._ = root._ || {};
root._.string = root._.str = _s;
exports._s = _s;
}
}(this || window));
// Register as a named module with AMD.
if (typeof define === 'function' && define.amd)
define('underscore.string', [], function(){ return _s; });
// Integrate with Underscore.js if defined
// or create our own underscore object.
root._ = root._ || {};
root._.string = root._.str = _s;
}(this, String);

File diff suppressed because it is too large Load Diff

View File

@ -739,9 +739,6 @@
display: block;
color: #4c4c4c;
text-decoration: none;
width: 200px;
text-overflow: ellipsis;
overflow: hidden;
}
.openerp .oe_dropdown_menu > li > a:hover {
text-decoration: none;
@ -3402,7 +3399,7 @@ div.ui-widget-overlay {
background: transparent;
}
.openerp_ie ul.oe_form_status li > .arrow span, .openerp_ie ul.oe_form_status_clickable li > .arrow span {
background-color: #fefefe !important;
background-color: #eeeeee !important;
}
.openerp_ie ul.oe_form_status li.oe_active > .label, .openerp_ie ul.oe_form_status_clickable li.oe_active > .label {
border-bottom: 1px solid #729fcf;

View File

@ -630,9 +630,6 @@ $sheet-padding: 16px
display: block
color: #4c4c4c
text-decoration: none
width: 200px
text-overflow: ellipsis
overflow: hidden
&:hover
text-decoration: none
.oe_dropdown_arrow:after
@ -2684,7 +2681,7 @@ div.ui-widget-overlay
background: transparent
> .arrow
span
background-color: #fefefe !important
background-color: #eeeeee !important
li.oe_active
> .label
border-bottom: 1px solid #729fcf

View File

@ -724,7 +724,7 @@ instance.web.Login = instance.web.Widget.extend({
params.db = db;
this.$('.oe_login_dbpane').empty().text(_t('Loading...'));
this.$('[name=login], [name=password]').prop('readonly', true);
instance.web.redirect('/?' + $.param(params));
instance.web.redirect('/web?' + $.param(params));
},
on_db_loaded: function (result) {
var self = this;
@ -1223,6 +1223,26 @@ instance.web.UserMenu = instance.web.Widget.extend({
},
});
instance.web.FullscreenWidget = instance.web.Widget.extend({
/**
* Widgets extending the FullscreenWidget will be displayed fullscreen,
* and will have a fixed 1:1 zoom level on mobile devices.
*/
start: function(){
if(!$('#oe-fullscreenwidget-viewport').length){
$('head').append('<meta id="oe-fullscreenwidget-viewport" name="viewport" content="initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">');
}
instance.webclient.set_content_full_screen(true);
return this._super();
},
destroy: function(){
instance.webclient.set_content_full_screen(false);
$('#oe-fullscreenwidget-viewport').remove();
return this._super();
},
});
instance.web.Client = instance.web.Widget.extend({
init: function(parent, origin) {
instance.client = instance.webclient = this;
@ -1377,7 +1397,11 @@ instance.web.WebClient = instance.web.Client.extend({
this.action_manager.do_action(action);
this.action_manager.inner_widget.on('login_successful', this, function() {
this.show_application(); // will load the state we just pushed
if ('redirect' in state) {
openerp.web.redirect(state.redirect);
} else {
this.show_application(); // will load the state we just pushed
}
});
},
show_application: function() {

View File

@ -561,6 +561,10 @@ instance.web.TranslationDataBase.include({
});
/** Custom jQuery plugins */
if(navigator.appVersion.indexOf("MSIE") !== -1) {
$.browser = $.browser || {};
$.browser.msie = 1;
}
$.fn.getAttributes = function() {
var o = {};
if (this.length) {

View File

@ -743,7 +743,7 @@ instance.web.DataSetSearch = instance.web.DataSet.extend({
});
},
get_domain: function (other_domain) {
this._model.domain(other_domain);
return this._model.domain(other_domain);
},
alter_ids: function (ids) {
this._super(ids);
@ -780,6 +780,7 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
this._super.apply(this, arguments);
this.reset_ids([]);
this.last_default_get = {};
this.running_reads = [];
},
default_get: function(fields, options) {
var self = this;
@ -846,6 +847,9 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
this.to_write = [];
this.cache = [];
this.delete_all = false;
_.each(_.clone(this.running_reads), function(el) {
el.reject();
});
},
read_ids: function (ids, fields, options) {
var self = this;
@ -861,7 +865,6 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
to_get.push(id);
}
});
var completion = $.Deferred();
var return_records = function() {
var records = _.map(ids, function(id) {
return _.extend({}, _.detect(self.cache, function(c) {return c.id === id;}).values, {"id": id});
@ -896,10 +899,20 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
}, 0);
});
}
completion.resolve(records);
return $.when(records);
};
if(to_get.length > 0) {
var rpc_promise = this._super(to_get, fields, options).done(function(records) {
var def = $.Deferred();
self.running_reads.push(def);
def.always(function() {
self.running_reads = _.without(self.running_reads, def);
});
this._super(to_get, fields, options).then(function() {
def.resolve.apply(def, arguments);
}, function() {
def.reject.apply(def, arguments);
});
return def.then(function(records) {
_.each(records, function(record, index) {
var id = to_get[index];
var cached = _.detect(self.cache, function(x) {return x.id === id;});
@ -910,13 +923,11 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
cached.values = _.defaults(_.clone(cached.values), record);
}
});
return_records();
return return_records();
});
$.when(rpc_promise).fail(function() {completion.reject();});
} else {
return_records();
return return_records();
}
return completion.promise();
},
/**
* Invalidates caching of a record in the dataset to ensure the next read
@ -1090,6 +1101,157 @@ instance.web.DropMisordered = instance.web.Class.extend({
}
});
instance.web.SimpleIndexedDB = instance.web.Class.extend({
/**
* A simple wrapper around IndexedDB that provides an asynchronous
* localStorage-like Key-Value api that persists between browser
* restarts.
*
* It will not work if the browser doesn't support a recent version
* of IndexedDB, and it may fail if the user refuses db access.
*
* All instances of SimpleIndexedDB will by default refer to the same
* IndexedDB database, if you want to pick another one, use the 'name'
* option on instanciation.
*/
init: function(opts){
var self = this;
var opts = opts || {};
this.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
this.db = undefined;
this._ready = new $.Deferred();
if(this.indexedDB && this.indexedDB.open){
var request = this.indexedDB.open( opts.name || "SimpleIndexedDB" ,1);
request.onerror = function(event){
self.db = null;
self._ready.reject(event.target.error);
};
request.onsuccess = function(event){
self.db = request.result;
self._ready.resolve();
};
request.onupgradeneeded = function(event){
self.db = event.target.result;
var objectStore = self.db.createObjectStore("keyvals", { keyPath:"key" });
self._ready.resolve();
};
}else{
this.db = null;
this._ready.reject({type:'UnknownError', message:'IndexedDB is not supported by your Browser'});
}
},
/**
* returns true if the browser supports the necessary IndexedDB API
* (but doesn't tell if the db can be created, check ready() for that)
*/
isSupportedByBrowser: function(){
return this.indexedDB && this.indexedDB.open;
},
/**
* returns a deferred that resolves when the db has been successfully
* initialized. done/failed callbacks are optional.
*/
ready: function(done,failed){
this._ready.then(done,failed);
return this._ready.promise();
},
/**
* fetches the value associated to 'key' in the db. if the key doesn't
* exists, it returns undefined. The returned value is provided as a
* deferred, or as the first parameter of the optional 'done' callback.
*/
getItem: function(key,done,failed){
var self = this;
var def = new $.Deferred();
def.then(done,failed);
this._ready.then(function(){
var request = self.db.transaction(["keyvals"],"readwrite")
.objectStore("keyvals")
.get(key);
request.onsuccess = function(){
def.resolve(request.result ? request.result.value : undefined);
};
request.onerror = function(event){
def.reject(event.target.error);
};
},function(){
def.reject({type:'UnknownError', message:'Could not initialize the IndexedDB database'});
});
return def.promise();
},
/**
* Associates a value to 'key' in the db, overwriting previous value if
* necessary. Contrary to localStorage, the value is not limited to strings and
* can be any javascript object, even with cyclic references !
*
* Be sure to check for failure as the user may refuse to have data localy stored.
*/
setItem: function(key,value,done,failed){
var self = this;
var def = new $.Deferred();
def.then(done,failed);
this._ready.then(function(){
var request = self.db.transaction(["keyvals"],"readwrite")
.objectStore("keyvals")
.put( {key:key, value:value} );
request.onsuccess = function(){
def.resolve();
};
request.onerror = function(event){
def.reject(event.target.error);
};
},function(){
def.reject({type:'UnknownError', message:'Could not initialize the IndexedDB database'});
});
return def.promise();
},
/**
* Removes the value associated with 'key' from the db.
*/
removeItem: function(key,done,failed){
var self = this;
var def = new $.Deferred();
def.then(done,failed);
this._ready.then(function(){
var request = self.db.transaction(["keyvals"],"readwrite")
.objectStore("keyvals")
.delete(key);
request.onsuccess = function(){
def.resolve();
};
request.onerror = function(event){
def.reject(event.target.error);
};
},function(){
def.reject({type:'UnknownError', message:'Could not initialize the IndexedDB database'});
});
return def.promise();
},
});
})();
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -1155,7 +1155,8 @@ openerp.Model = openerp.Class.extend({
kwargs = args;
args = [];
}
return this.session().rpc('/web/dataset/call_kw', {
var call_kw = _.str.sprintf('/web/dataset/call_kw/%s/%s', this.name, method);
return this.session().rpc(call_kw, {
model: this.name,
method: method,
args: args,
@ -1236,15 +1237,14 @@ openerp.TranslationDataBase = openerp.Class.extend(/** @lends instance.Translati
openerp._t = new openerp.TranslationDataBase().build_translation_function();
openerp.get_cookie = function(c_name) {
if (document.cookie.length > 0) {
var c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1) {
c_start = c_start + c_name.length + 1;
var c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
var cookies = document.cookie ? document.cookie.split('; ') : [];
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = parts.shift();
var cookie = parts.join('=');
if (c_name && c_name === name) {
return cookie;
}
}
return "";
@ -1292,7 +1292,10 @@ openerp.str_to_datetime = function(str) {
if ( !res ) {
throw new Error("'" + str + "' is not a valid datetime");
}
var tmp = new Date();
var tmp = new Date(2000,0,1);
tmp.setUTCMonth(1970);
tmp.setUTCMonth(0);
tmp.setUTCDate(1);
tmp.setUTCFullYear(parseFloat(res[1]));
tmp.setUTCMonth(parseFloat(res[2]) - 1);
tmp.setUTCDate(parseFloat(res[3]));
@ -1324,7 +1327,7 @@ openerp.str_to_date = function(str) {
if ( !res ) {
throw new Error("'" + str + "' is not a valid date");
}
var tmp = new Date();
var tmp = new Date(2000,0,1);
tmp.setFullYear(parseFloat(res[1]));
tmp.setMonth(parseFloat(res[2]) - 1);
tmp.setDate(parseFloat(res[3]));
@ -1451,4 +1454,4 @@ if (typeof(define) !== "undefined") { // amd
window.openerp = declare($, _, QWeb2);
}
})();
})();

View File

@ -489,6 +489,9 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
if (item.facet !== undefined) {
// regular completion item
if (item.first) {
$item.css('borderTop', '1px solid #cccccc');
}
return $item.append(
(item.label)
? $('<a>').html(item.label)
@ -522,8 +525,18 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
.filter(function (input) { return input.visible(); })
.invoke('complete', req.term)
.value()).then(function () {
resp(_(_(arguments).compact()).flatten(true));
});
resp(_(arguments).chain()
.compact()
.map(function (completion) {
console.log(completion);
if (completion.length && completion[0].facet !== undefined) {
completion[0].first = true;
}
return completion;
})
.flatten(true)
.value());
});
},
/**
@ -1535,6 +1548,9 @@ instance.web.search.ManyToOneField = instance.web.search.CharField.extend({
this.model = new instance.web.Model(this.attrs.relation);
},
complete: function (needle) {
if (this.attrs.operator || this.attrs.filter_domain) {
return this._super(needle);
}
var self = this;
// FIXME: "concurrent" searches (multiple requests, mis-ordered responses)
var context = instance.web.pyeval.eval(

View File

@ -58,8 +58,7 @@ openerp.testing = {};
}
var fn, params;
var needle = rparams.model + ':' + rparams.method;
if (url.url === '/web/dataset/call_kw'
&& needle in this.responses) {
if (url.url.substr(0, 20) === '/web/dataset/call_kw' && needle in this.responses) {
fn = this.responses[needle];
params = [
rparams.args || [],

View File

@ -399,9 +399,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.dataset.index = this.dataset.ids.length - 1;
break;
}
this.reload();
var def = this.reload();
this.trigger('pager_action_executed');
return def;
}
return $.when();
},
init_pager: function() {
var self = this;
@ -416,8 +418,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.$el.find('.oe_form_pager').replaceWith(this.$pager);
}
this.$pager.on('click','a[data-pager-action]',function() {
var action = $(this).data('pager-action');
self.execute_pager_action(action);
var $el = $(this);
if ($el.attr("disabled"))
return;
var action = $el.data('pager-action');
var def = $.when(self.execute_pager_action(action));
$el.attr("disabled");
def.always(function() {
$el.removeAttr("disabled");
});
});
this.do_update_pager();
},
@ -722,12 +731,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
var self = this;
return this.save().done(function(result) {
self.trigger("save", result);
self.to_view_mode();
}).then(function(result) {
var parent = self.ViewManager.ActionManager.getParent();
if(parent){
parent.menu.do_reload_needaction();
}
self.reload().then(function() {
self.to_view_mode();
var parent = self.ViewManager.ActionManager.getParent();
if(parent){
parent.menu.do_reload_needaction();
}
});
});
},
on_button_cancel: function(event) {
@ -891,17 +901,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
* @param {Object} r result of the write function.
*/
record_saved: function(r) {
var self = this;
this.trigger('record_saved', r);
if (!r) {
// should not happen in the server, but may happen for internal purpose
this.trigger('record_saved', r);
return $.Deferred().reject();
} else {
return $.when(this.reload()).then(function () {
self.trigger('record_saved', r);
return r;
});
}
return r;
},
/**
* Updates the form' dataset to contain the new record:
@ -2804,7 +2809,7 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan
var self = this;
this._super(field_manager, node);
this.set("value", false);
this.set("values", [[false, '']]);
this.set("values", []);
this.records_orderer = new instance.web.DropMisordered();
this.field_manager.on("view_content_has_changed", this, function() {
var domain = new openerp.web.CompoundDomain(this.build_domain()).eval();
@ -2826,14 +2831,9 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan
var model = new openerp.Model(openerp.session, this.field.relation);
def = model.call("search", [this.get("domain")], {"context": this.build_context()}).then(function(record_ids) {
return model.call("name_get", [record_ids] , {"context": self.build_context()});
}).then(function(res) {
return [[false, '']].concat(res);
});
} else {
var values = _(this.field.selection).chain()
.reject(function (v) { return v[0] === false && v[1] === ''; })
.unshift([false, ''])
.value();
var values = _.reject(this.field.selection, function (v) { return v[0] === false && v[1] === ''; });
def = $.when(values);
}
this.records_orderer.add(def).then(function(values) {
@ -2871,8 +2871,8 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan
},
store_dom_value: function () {
if (!this.get('effective_readonly') && this.$('select').length) {
this.internal_set_value(
this.get("values")[this.$('select')[0].selectedIndex][0]);
var val = JSON.parse(this.$('select').val());
this.internal_set_value(val);
}
},
set_value: function(value_) {
@ -2881,19 +2881,18 @@ instance.web.form.FieldSelection = instance.web.form.AbstractField.extend(instan
this._super(value_);
},
render_value: function() {
var values = this.get("values");
values = [[false, this.node.attrs.placeholder || '']].concat(values);
var found = _.find(values, function(el) { return el[0] === this.get("value"); }, this);
if (! found) {
found = [this.get("value"), _t('Unknown')];
values = [found].concat(values);
}
if (! this.get("effective_readonly")) {
this.$().html(QWeb.render("FieldSelectionSelect", {widget: this}));
var index = 0;
_.each(this.get("values"), function(el, i) {
if (el[0] === this.get('value'))
index = i;
}, this);
this.$el.find('select')[0].selectedIndex = index;
this.$().html(QWeb.render("FieldSelectionSelect", {widget: this, values: values}));
this.$("select").val(JSON.stringify(found[0]));
} else {
var self = this;
var option = _(this.get("values"))
.detect(function (record) { return record[0] === self.get('value'); });
this.$el.text(option ? option[1] : this.get("values")[0][1]);
this.$el.text(found[1]);
}
},
focus: function() {
@ -3077,7 +3076,7 @@ instance.web.form.CompletionFieldMixin = {
values.push({
label: _t("Search More..."),
action: function() {
dataset.name_search(search_val, self.build_domain(), 'ilike', false).done(function(data) {
dataset.name_search(search_val, self.build_domain(), 'ilike', 160).done(function(data) {
self._search_create_popup("search", data);
});
},
@ -5556,23 +5555,23 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
var calculation = _.bind(function() {
if (this.field.type == "many2one") {
return self.get_distant_fields().then(function(fields) {
return new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), self.get("evaluated_selection_domain"))
.read_slice(fields.fold ? ['fold'] : ['id'], {}).then(function (records) {
var ids = _.map(records, function (val) {return val.id;});
return self.dataset.name_get(ids).then(function (records_name) {
_.each(records, function (record) {
var name = _.find(records_name, function (val) {return val[0] == record.id;})[1];
if (record.fold && record.id != self.get('value')) {
selection_folded.push([record.id, name]);
} else {
selection_unfolded.push([record.id, name]);
}
});
/* :deprecated: fold feature will probably be removed */
// return self.get_distant_fields().then(function(fields) {
self.distant_fields = {};
return new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), self.get("evaluated_selection_domain"))
.read_slice(_.union(_.keys(self.distant_fields), ['id']), {}).then(function (records) {
var ids = _.pluck(records, 'id');
return self.dataset.name_get(ids).then(function (records_name) {
_.each(records, function (record) {
var name = _.find(records_name, function (val) {return val[0] == record.id;})[1];
if (record.fold && record.id != self.get('value')) {
selection_folded.push([record.id, name]);
} else {
selection_unfolded.push([record.id, name]);
}
});
});
});
});
} else {
// For field type selection filter values according to
// statusbar_visible attribute of the field. For example:
@ -5594,6 +5593,9 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
}
});
},
/*
* :deprecated: this feature will probably be removed with OpenERP v8
*/
get_distant_fields: function() {
var self = this;
if (this.distant_fields) {

View File

@ -501,14 +501,13 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
*
* @returns {$.Deferred} promise to content reloading
*/
reload_content: function () {
reload_content: synchronized(function () {
var self = this;
self.$el.find('.oe_list_record_selector').prop('checked', false);
this.records.reset();
var reloaded = $.Deferred();
this.$el.find('.oe_list_content').append(
this.groups.render(function () {
// Keep '=='. This is not a mistake, this is a wanted behaviour to match null & undefined
if (self.dataset.index == null) {
if (self.records.length) {
self.dataset.index = 0;
@ -525,7 +524,7 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
limit: this._limit
});
return reloaded.promise();
},
}),
reload: function () {
return this.reload_content();
},
@ -1367,6 +1366,9 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
.removeClass('ui-icon-triangle-1-s')
.addClass('ui-icon-triangle-1-e');
child.close();
// force recompute the selection as closing group reset properties
var selection = self.get_selection();
$(self).trigger('selected', [selection.ids, this.records]);
}
});
}
@ -1377,22 +1379,29 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
if (group.grouped_on) {
var row_data = {};
row_data[group.grouped_on] = group;
var group_label = _t("Undefined");
var group_column = _(self.columns).detect(function (column) {
return column.id === group.grouped_on; });
if (! group_column) {
throw new Error(_.str.sprintf(
_t("Grouping on field '%s' is not possible because that field does not appear in the list view."),
group.grouped_on));
}
var group_label;
try {
group_label = group_column.format(row_data, {
value_if_empty: _t("Undefined"),
process_modifiers: false
});
} catch (e) {
group_label = _.str.escapeHTML(row_data[group_column.id].value);
if (group_column) {
try {
group_label = group_column.format(row_data, {
value_if_empty: _t("Undefined"),
process_modifiers: false
});
} catch (e) {
group_label = _.str.escapeHTML(row_data[group_column.id].value);
}
} else {
group_label = group.value;
if (group_label instanceof Array) {
group_label = group_label[1];
}
if (group_label === false) {
group_label = _t('Undefined');
}
group_label = _.str.escapeHTML(group_label);
}
// group_label is html-clean (through format or explicit
// escaping if format failed), can inject straight into HTML
$group_column.html(_.str.sprintf(_t("%s (%d)"),
@ -1464,14 +1473,13 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
var view = this.view,
limit = view.limit(),
d = new $.Deferred(),
page = this.datagroup.openable ? this.page : view.page;
var fields = _.pluck(_.select(this.columns, function(x) {return x.tag == "field";}), 'name');
var options = { offset: page * limit, limit: limit, context: {bin_size: true} };
//TODO xmo: investigate why we need to put the setTimeout
$.async_when().done(function() {
dataset.read_slice(fields, options).done(function (records) {
return $.async_when().then(function() {
return dataset.read_slice(fields, options).then(function (records) {
// FIXME: ignominious hacks, parents (aka form view) should not send two ListView#reload_content concurrently
if (self.records.length) {
self.records.reset(null, {silent: true});
@ -1503,13 +1511,12 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
self.records.add(records, {silent: true});
list.render();
d.resolve(list);
if (_.isEmpty(records)) {
view.no_result();
}
return list;
});
});
return d.promise();
},
setup_resequence_rows: function (list, dataset) {
// drag and drop enabled if list is not sorted and there is a
@ -1590,11 +1597,12 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
self.render_groups(groups));
if (post_render) { post_render(); }
}, function (dataset) {
self.render_dataset(dataset).done(function (list) {
self.render_dataset(dataset).then(function (list) {
self.children[null] = list;
self.elements =
[list.$current.replaceAll($el)[0]];
self.setup_resequence_rows(list, dataset);
}).always(function() {
if (post_render) { post_render(); }
});
});
@ -1637,6 +1645,22 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
}
});
/**
* Serializes concurrent calls to this asynchronous method. The method must
* return a deferred or promise.
*
* Current-implementation is class-serialized (the mutex is common to all
* instances of the list view). Can be switched to instance-serialized if
* having concurrent list views becomes possible and common.
*/
function synchronized(fn) {
var fn_mutex = new $.Mutex();
return function () {
var args = _.toArray(arguments);
args.unshift(this);
return fn_mutex.exec(fn.bind.apply(fn, args));
};
}
var DataGroup = instance.web.Class.extend({
init: function(parent, model, domain, context, group_by, level) {
this.model = new instance.web.Model(model, context, domain);
@ -1648,6 +1672,10 @@ var DataGroup = instance.web.Class.extend({
},
list: function (fields, ifGroups, ifRecords) {
var self = this;
if (!_.isEmpty(this.group_by)) {
// ensure group_by fields are read.
fields = _.unique((fields || []).concat(this.group_by));
}
var query = this.model.query(fields).order_by(this.sort).group_by(this.group_by);
$.when(query).done(function (querygroups) {
// leaf node

View File

@ -147,6 +147,19 @@ instance.web.ActionManager = instance.web.Widget.extend({
this.inner_action = last_widget.action;
}
},
add_breadcrumb_url: function (url, label) {
// Add a pseudo breadcrumb that will redirect to an url
this.push_breadcrumb({
show: function() {
instance.web.redirect(url);
},
hide: function() {},
destroy: function() {},
get_title: function() {
return label;
}
});
},
get_title: function() {
var titles = [];
for (var i = 0; i < this.breadcrumbs.length; i += 1) {
@ -217,6 +230,12 @@ instance.web.ActionManager = instance.web.Widget.extend({
do_load_state: function(state, warm) {
var self = this,
action_loaded;
if (!warm && 'return_label' in state) {
var return_url = state.return_url || document.referrer;
if (return_url) {
this.add_breadcrumb_url(return_url, state.return_label);
}
}
if (state.action) {
if (_.isString(state.action) && instance.web.client_actions.contains(state.action)) {
var action_client = {
@ -225,7 +244,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
params: state,
_push_me: state._push_me,
};
this.null_action();
if (warm) {
this.null_action();
}
action_loaded = this.do_action(action_client);
} else {
var run_action = (!this.inner_widget || !this.inner_widget.action) || this.inner_widget.action.id !== state.action;
@ -245,7 +266,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
add_context.active_ids = [state.active_id];
}
add_context.params = state;
this.null_action();
if (warm) {
this.null_action();
}
action_loaded = this.do_action(state.action, { additional_context: add_context });
$.when(action_loaded || null).done(function() {
instance.webclient.menu.has_been_loaded.done(function() {
@ -258,7 +281,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
}
} else if (state.model && state.id) {
// TODO handle context & domain ?
this.null_action();
if (warm) {
this.null_action();
}
var action = {
res_model: state.model,
res_id: state.id,
@ -268,7 +293,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
action_loaded = this.do_action(action);
} else if (state.sa) {
// load session action
this.null_action();
if (warm) {
this.null_action();
}
action_loaded = this.rpc('/web/session/get_session_action', {key: state.sa}).then(function(action) {
if (action) {
return self.do_action(action);
@ -510,7 +537,11 @@ instance.web.ActionManager = instance.web.Widget.extend({
});
},
ir_actions_act_url: function (action) {
window.open(action.url, action.target === 'self' ? '_self' : '_blank');
if (action.target === 'self') {
instance.web.redirect(action.url);
} else {
window.open(action.url, '_blank');
}
return $.when();
},
});
@ -1178,11 +1209,12 @@ instance.web.Sidebar = instance.web.Widget.extend({
var self = this;
self.getParent().sidebar_eval_context().done(function (sidebar_eval_context) {
var ids = self.getParent().get_selected_ids();
var domain;
if (self.getParent().get_active_domain) {
var domain = self.getParent().get_active_domain();
domain = self.getParent().get_active_domain();
}
else {
var domain = $.Deferred().resolve(undefined);
domain = $.Deferred().resolve(undefined);
}
if (ids.length === 0) {
instance.web.dialog($("<div />").text(_t("You must choose at least one record.")), { title: _t("Warning"), modal: true });
@ -1354,7 +1386,17 @@ instance.web.View = instance.web.Widget.extend({
return self.getParent().on_action_executed.apply(null, arguments);
}
};
var context = new instance.web.CompoundContext(dataset.get_context(), action_data.context || {});
var context = dataset.get_context();
if (action_data.model !== dataset.model) {
// filter out context keys that are specific to the action model.
// Wrong default_ and search_default values will no give the expected views
// Wrong group_by values will simply fail and forbid rendering of the destination view
context = _.object(_.reject(_.pairs(context.eval()), function(pair) {
return pair[0].match('^(?:(?:default_|search_default_).+|group_by|group_by_no_leaf)$') !== null;
}));
}
context = new instance.web.CompoundContext(context, action_data.context || {});
var handler = function (action) {
if (action && action.constructor == Object) {
var ncontext = new instance.web.CompoundContext(context);

View File

@ -459,7 +459,7 @@
<tr>
<td class="oe_leftbar" valign="top">
<t t-set="debug" t-value="__debug__ ? '&amp;debug' : ''"/>
<a class="oe_logo" t-attf-href="/?#{debug}">
<a class="oe_logo" t-attf-href="/web?#{debug}">
<span class="oe_logo_edit">Edit Company data</span>
<img t-att-src='widget.session.url("/web/binary/company_logo")'/>
</a>
@ -1107,10 +1107,9 @@
t-att-tabindex="widget.node.attrs.tabindex"
t-att-autofocus="widget.node.attrs.autofocus"
t-att-id="widget.id_for_label">
<t t-foreach="widget.get('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"/>
<t t-foreach="values" t-as="option">
<option t-att-value="JSON.stringify(option[0])">
<t t-esc="option[1]"/>
</option>
</t>
</select>

View File

@ -427,12 +427,55 @@ ropenerp.testing.section('server-formats', {
date3.getUTCHours(), date3.getUTCMinutes(), date3.getUTCSeconds(), date3.getUTCMilliseconds()],
[2009, 5 - 1, 4, 12, 34, 23, 845]);
});
test('Parse server datetime on 31', {asserts: 1}, function() {
var wDate = window.Date;
var s = ropenerp.testing.Stack();
return s.push(function() {
window.Date = function(v) {
if (_.isUndefined(v)) {
v = '2013-10-31 12:34:56';
}
return new wDate(v);
};
}, function() {
window.Date = wDate;
}).execute(function() {
return openerp.str_to_datetime('2013-11-11 02:45:21');
}).then(function(date) {
deepEqual(
[date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(),
date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()],
[2013, 11 - 1, 11, 2, 45, 21]);
});
});
test('Parse server date', function () {
var date = openerp.str_to_date("2009-05-04");
deepEqual(
[date.getFullYear(), date.getMonth(), date.getDate()],
[2009, 5 - 1, 4]);
});
test('Parse server date on 31', {asserts: 1}, function() {
var wDate = window.Date;
var s = ropenerp.testing.Stack();
return s.push(function() {
window.Date = function(v) {
if (_.isUndefined(v)) {
v = '2013-10-31 12:34:56';
}
return new wDate(v);
};
}, function() {
window.Date = wDate;
}).execute(function() {
return openerp.str_to_date('2013-11-21');
}).then(function(date) {
deepEqual(
[date.getFullYear(), date.getMonth(), date.getDate()],
[2013, 11 - 1, 21]);
});
});
test('Parse server time', function () {
var date = openerp.str_to_time("12:34:23");
deepEqual(

View File

@ -614,6 +614,29 @@ openerp.testing.section('search.completions', {
{relation: 'dummy.model'}, view);
return f.complete("bob");
});
test("M2O custom operator", {asserts: 6}, function (instance) {
var view = { inputs: [], };
var f = new instance.web.search.ManyToOneField(
{attrs: {string: 'Dummy', operator:'ilike'}},
{relation: 'dummy.model'}, view);
return f.complete('bob')
.done(function (completions) {
equal(completions.length, 1, "should provide a single completion");
var c = completions[0];
equal(c.label, "Search <em>Dummy</em> for: <strong>bob</strong>",
"should propose fuzzy searching of the value");
ok(c.facet, "should have a facet");
var facet = new instance.web.search.Facet(c.facet);
equal(facet.get('category'), f.attrs.string,
"completion facet should bear the field's name");
strictEqual(facet.get('field'), f,
"completion facet should yield the field");
deepEqual(facet.values.toJSON(), [{label: 'bob', value: 'bob'}],
"facet should have a single value using the completion item");
});
});
test('Integer: invalid', {asserts: 1}, function (instance) {
var view = {inputs: []};
var f = new instance.web.search.IntegerField(

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
"X-Poedit-Language: Czech\n"
#. module: web_calendar

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -15,8 +15,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
"Language: es\n"
#. module: web_calendar

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-11-21 05:27+0000\n"
"X-Generator: Launchpad (build 16831)\n"
#. module: web_calendar
#. openerp-web

Some files were not shown because too many files have changed in this diff Show More