diff --git a/addons/web/__openerp__.py b/addons/web/__openerp__.py index 43700b017a7..2beceba946b 100644 --- a/addons/web/__openerp__.py +++ b/addons/web/__openerp__.py @@ -1,6 +1,11 @@ { "name" : "web", - "category" : "Hidden", + "category": "Hidden", + "description": + """ + OpenERP Web core module. + This module provides the core of the OpenERP web client. + """, "depends" : [], 'active': True, 'post_load' : 'wsgi_postload', @@ -10,7 +15,7 @@ "static/lib/datejs/parser.js", "static/lib/datejs/sugarpak.js", "static/lib/datejs/extras.js", - "static/lib/jquery/jquery-1.6.2.js", + "static/lib/jquery/jquery-1.6.4.js", "static/lib/jquery.MD5/jquery.md5.js", "static/lib/jquery.form/jquery.form.js", "static/lib/jquery.validate/jquery.validate.js", @@ -43,6 +48,7 @@ "static/src/js/data_import.js", "static/src/js/search.js", "static/src/js/view_form.js", + "static/src/js/view_page.js", "static/src/js/view_list.js", "static/src/js/view_list_editable.js", "static/src/js/view_tree.js", diff --git a/addons/web/common/http.py b/addons/web/common/http.py index 4d44f3175f8..81cded7d08b 100644 --- a/addons/web/common/http.py +++ b/addons/web/common/http.py @@ -529,7 +529,7 @@ class Root(object): params = urllib.urlencode(request.args) return werkzeug.utils.redirect(self.root + '?' + params, 301)( environ, start_response) - elif request.path == '/mobile': + elif request.path == '/mobile' or ('#' in request.path): return werkzeug.utils.redirect( '/web_mobile/static/src/web_mobile.html', 301)(environ, start_response) diff --git a/addons/web/common/xml2json.py b/addons/web/common/xml2json.py index 16022624fe7..1f2e74691b9 100644 --- a/addons/web/common/xml2json.py +++ b/addons/web/common/xml2json.py @@ -16,7 +16,7 @@ class Xml2Json(object): return Xml2Json.convert_element(root) @staticmethod - def convert_element(el, skip_whitespaces=True): + def convert_element(el, preserve_whitespaces=False): res = {} if el.tag[0] == "{": ns, name = el.tag.rsplit("}", 1) @@ -28,11 +28,11 @@ class Xml2Json(object): for k, v in el.items(): res["attrs"][k] = v kids = [] - if el.text and (not skip_whitespaces or el.text.strip() != ''): + if el.text and (preserve_whitespaces or el.text.strip() != ''): kids.append(el.text) for kid in el: - kids.append(Xml2Json.convert_element(kid)) - if kid.tail and (not skip_whitespaces or kid.tail.strip() != ''): + kids.append(Xml2Json.convert_element(kid, preserve_whitespaces)) + if kid.tail and (preserve_whitespaces or kid.tail.strip() != ''): kids.append(kid.tail) res["children"] = kids return res diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 6af0268b3bf..27cde36fa34 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -103,6 +103,7 @@ class WebClient(openerpweb.Controller): addons = self.server_wide_modules(req) else: addons = addons.split(',') + r = [] for addon in addons: manifest = openerpweb.addons_manifest.get(addon, None) if not manifest: @@ -112,7 +113,8 @@ class WebClient(openerpweb.Controller): globlist = manifest.get(key, []) for pattern in globlist: for path in glob.glob(os.path.normpath(os.path.join(addons_path, addon, pattern))): - yield path, path[len(addons_path):] + r.append( (path, path[len(addons_path):])) + return r def manifest_list(self, req, mods, extension): if not req.debug: @@ -605,6 +607,14 @@ def fix_view_modes(action): if 'views' not in action: generate_views(action) + id_form = None + for index, (id, mode) in enumerate(action['views']): + if mode == 'form': + id_form = id + break + if id_form is not None: + action['views'].insert(index + 1, (id_form, 'page')) + if action.pop('view_type', 'form') != 'form': return action @@ -778,12 +788,15 @@ class DataSet(openerpweb.Controller): return Model.unlink(ids, req.session.eval_context(req.context)) def call_common(self, req, model, method, args, domain_id=None, context_id=None): - domain = args[domain_id] if domain_id and len(args) - 1 >= domain_id else [] - context = args[context_id] if context_id and len(args) - 1 >= context_id else {} + has_domain = domain_id is not None and domain_id < len(args) + has_context = context_id is not None and context_id < len(args) + + domain = args[domain_id] if has_domain else [] + context = args[context_id] if has_context else {} c, d = eval_context_and_domain(req.session, context, domain) - if domain_id and len(args) - 1 >= domain_id: + if has_domain: args[domain_id] = d - if context_id and len(args) - 1 >= context_id: + if has_context: args[context_id] = c for i in xrange(len(args)): @@ -841,12 +854,12 @@ class View(openerpweb.Controller): context = req.session.eval_context(req.context) fvg = Model.fields_view_get(view_id, view_type, context, toolbar, submenu) # todo fme?: check that we should pass the evaluated context here - self.process_view(req.session, fvg, context, transform) + self.process_view(req.session, fvg, context, transform, (view_type == 'kanban')) if toolbar and transform: self.process_toolbar(req, fvg['toolbar']) return fvg - def process_view(self, session, fvg, context, transform): + def process_view(self, session, fvg, context, transform, preserve_whitespaces=False): # depending on how it feels, xmlrpclib.ServerProxy can translate # XML-RPC strings to ``str`` or ``unicode``. ElementTree does not # enjoy unicode strings which can not be trivially converted to @@ -864,7 +877,7 @@ class View(openerpweb.Controller): xml = self.transform_view(arch, session, evaluation_context) else: xml = ElementTree.fromstring(arch) - fvg['arch'] = web.common.xml2json.Xml2Json.convert_element(xml) + fvg['arch'] = web.common.xml2json.Xml2Json.convert_element(xml, preserve_whitespaces) for field in fvg['fields'].itervalues(): if field.get('views'): @@ -1064,6 +1077,44 @@ class SearchView(View): }, context) return to_return + @openerpweb.jsonrequest + def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''): + ctx = web.common.nonliterals.CompoundContext(context_to_save) + ctx.session = req.session + ctx = ctx.evaluate() + domain = web.common.nonliterals.CompoundDomain(domain) + domain.session = req.session + domain = domain.evaluate() + + dashboard_action = load_actions_from_ir_values(req, 'action', 'tree_but_open', + [('ir.ui.menu', menu_id)], False) + if dashboard_action: + action = dashboard_action[0][2] + if action['res_model'] == 'board.board' and action['views'][0][1] == 'form': + # Maybe should check the content instead of model board.board ? + view_id = action['views'][0][0] + board = req.session.model(action['res_model']).fields_view_get(view_id, 'form') + if board and 'arch' in board: + xml = ElementTree.fromstring(board['arch']) + column = xml.find('./board/column') + if column: + new_action = ElementTree.Element('action', { + 'name' : str(action_id), + 'string' : name, + 'view_mode' : view_mode, + 'context' : str(ctx), + 'domain' : str(domain) + }) + column.insert(0, new_action) + arch = ElementTree.tostring(xml, 'utf-8') + return req.session.model('ir.ui.view.custom').create({ + 'user_id': req.session._uid, + 'ref_id': view_id, + 'arch': arch + }, req.session.eval_context(req.context)) + + return False + class Binary(openerpweb.Controller): _cp_path = "/web/binary" @@ -1348,7 +1399,7 @@ class Export(View): context = req.session.eval_context(req.context) Model = req.session.model(model) - ids = ids or Model.search(domain, context=context) + ids = ids or Model.search(domain, 0, False, False, context) field_names = map(operator.itemgetter('name'), fields) import_data = Model.export_data(ids, field_names, context).get('datas',[]) diff --git a/addons/web/po/ar.po b/addons/web/po/ar.po index 34c7beccf4a..34072e420cb 100644 --- a/addons/web/po/ar.po +++ b/addons/web/po/ar.po @@ -7,54 +7,270 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-08 05:44+0000\n" "Last-Translator: Ahmad Khayyat \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:49+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "إغلاق" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "إلغاء" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "تحذير، تم تحرير السجل، تعديلاتك سيتم تجاهلها" -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "    مزيداً من البحث..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   إنشاء \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   إنشاء و تحرير..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "إنشاء" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "استيراد" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "تصدير" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "عليك إختيار سجل واحد علي الأقل." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "تحذير" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "ترجمات" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "حفظ" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "إغلاق" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -83,10 +299,6 @@ msgstr "." msgid "Loading..." msgstr "جاري التحميل..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "إنشاء" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "إزالة" @@ -273,16 +485,8 @@ msgid "View#" msgstr "View#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "حقول" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "عرض التسميات" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" -msgstr "روابط الشريط الجانبي" +msgid "More…" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Field" @@ -292,14 +496,6 @@ msgstr "حقل" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "ترجمة العرض" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "ترجمة الشريط الجانبي" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "حذف" @@ -321,29 +517,13 @@ msgid "Last" msgstr "الأخير" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "حفظ و تحرير" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "إنشاء و تحرير" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "جديد" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "تكرار" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "للقراءة فقط/قابل للتحرير" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr ">>" @@ -368,17 +548,81 @@ msgstr "اضافة" msgid "Unhandled widget" msgstr "أداة غير معالجة" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "؟" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "تم" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -412,18 +656,34 @@ msgstr "حفظ كـ" msgid "Clear" msgstr "إفراغ" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "مرشحات متقدمة" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- مرشحات --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- إجراءات --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "حفظ المرشح" @@ -440,6 +700,14 @@ msgstr "اسم المرشح:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(لاحظ أن أي مرشح بنفس الاسم سيتم إستبداله)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "يجب تطابق أي من الشروط التالية" @@ -460,10 +728,6 @@ msgstr "إضافة شرط" msgid "and" msgstr "و" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "إلغاء" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "حفظ و جديد" @@ -472,10 +736,6 @@ msgstr "حفظ و جديد" msgid "Save & Close" msgstr "حفظ و إغلاق" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "تصدير" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -556,10 +816,6 @@ msgstr "كلمة المرور الجديدة:" msgid "Confirm Password:" msgstr "تأكيد كلمة المرور:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "استيراد" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "إستيراد ملف .CSV" diff --git a/addons/web/po/bn.po b/addons/web/po/bn.po new file mode 100644 index 00000000000..9a281efc988 --- /dev/null +++ b/addons/web/po/bn.po @@ -0,0 +1,933 @@ +# Bengali translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-11-24 12:45+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 +msgid "" +"Warning, the record has been modified, your changes will be discarded." +msgstr "" + +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 +msgid "   Search More..." +msgstr "" + +#: addons/web/static/src/js/view_form.js:1893 +#, python-format +msgid "   Create \"%s\"" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1899 +msgid "   Create and Edit..." +msgstr "" + +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 +msgid "You must choose at least one record." +msgstr "" + +#: addons/web/static/src/js/views.js:703 +msgid "Warning" +msgstr "" + +#: addons/web/static/src/js/views.js:737 +msgid "Translations" +msgstr "" + +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 +msgid "Save" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "x" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{title}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{text}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Powered by" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "openerp.com" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Loading..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Drop" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Backup" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Restore" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Back to Login" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CREATE DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New database name:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Load Demonstration data:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Default language:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Admin password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "DROP DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "BACKUP DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "RESTORE DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "File:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CHANGE MASTER PASSWORD" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New master password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm new master password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Login" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Bad username or password" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"We think that daily job activities can be more intuitive, efficient, " +"automated, .. and even fun." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP's vision to be:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Full featured" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Today's enterprise challenges are multiple. We provide one module for each " +"need." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open Source" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"To Build a great product, we rely on the knowledge of thousands of " +"contributors." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User Friendly" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"In order to be productive, people need clean and easy to use interface." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ")" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "LOGOUT" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "«" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "»" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_menu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_submenu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Hide this tip" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Disable all tips" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "View#" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "More…" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ":" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delete" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "First" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Last" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Edit" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Duplicate" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<<" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "0" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "/" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">>" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Unhandled widget" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "?" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Create..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Search..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Uploading ..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save As" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Clear" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Advanced Filter" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save Filter" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Manage Filters" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Filter Name:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(Any existing filter with the same name will be replaced)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Any of the following conditions must match" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "All the following conditions must match" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "None of the following conditions must match" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add condition" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "and" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & New" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & Close" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"This wizard will export all data that matches the current search criteria to " +"a CSV file.\n" +" You can export all data or only the fields that can be " +"reimported after modification." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Compatible Export" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export all Data" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Formats" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Available fields" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Fields to export" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save fields list" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove All" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Name" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid " " +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save as:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Ok" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Saved exports:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Old Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "1. Import a .CSV file" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Select a .CSV file to import. If you need a sample of file to import,\n" +" you should use the export tool with the \"Import Compatible\" option." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CSV File:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "2. Check your file format" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Options" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Does your file have titles?" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Separator:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delimiter:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Encoding:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "UTF-8" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Latin 1" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Lines to skip" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "The import failed due to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Here is a preview of the file we could not import:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP Web" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Version" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP is a trademark of the" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP SA Company" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Licenced under the terms of" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "GNU Affero General Public License" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "About OpenERP" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"is a free enterprise-scale software system that is designed to boost\n" +" productivity and profit through data integration. It connects, " +"improves and\n" +" manages business processes in areas such as sales, finance, " +"supply chain,\n" +" project management, production, services, CRM, etc..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"The system is platform-independent, and can be installed on Windows, Mac OS " +"X,\n" +" and various Linux and other Unix-based distributions. Its " +"architecture enables\n" +" new functionality to be rapidly created, modifications to be " +"made to a\n" +" production system and migration to a new version to be " +"straightforward." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Depending on your needs, OpenERP is available through a web or application " +"client." +msgstr "" diff --git a/addons/web/po/da.po b/addons/web/po/da.po index d40db04e29e..a38080edca4 100644 --- a/addons/web/po/da.po +++ b/addons/web/po/da.po @@ -7,56 +7,272 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-08 21:58+0000\n" "Last-Translator: Jonas Mortensen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:49+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Luk" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Annullér" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Advarsel, registreringen er blevet ændret, dine ændringer vil derfor blive " "kasseret." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Søg efter mere...." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Create \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Opret og rediger..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Opret" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importér" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Eksportér" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Du skal vælge mindst en registrering." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Advarsel" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Oversættelser" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Gem" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Luk" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -85,10 +301,6 @@ msgstr "," msgid "Loading..." msgstr "Indlæser..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Opret" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Drop" @@ -279,16 +491,8 @@ msgid "View#" msgstr "View#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Felter" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Vis etiketter" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" -msgstr "Relaterede til Sidebare" +msgid "More…" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Field" @@ -298,14 +502,6 @@ msgstr "Felt" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Se oversættelse" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Oversæt sidebar" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Slet" @@ -327,29 +523,13 @@ msgid "Last" msgstr "Sidste" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Gem & Rediger" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Opret & Rediger" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Ny" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplikér" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Skrivebeskyttet/redigerbar" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -374,17 +554,81 @@ msgstr "Tilføj" msgid "Unhandled widget" msgstr "Ubehandlet widget" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Udført" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -418,18 +662,34 @@ msgstr "Gem Som" msgid "Clear" msgstr "Ryd" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Avanceret filtrering" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtreringer --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Handlinger --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Gem filter" @@ -446,6 +706,14 @@ msgstr "Filter Navn:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Et hvert filter med samme navn vil blive overskrevet)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Enhver af de følgende betingelser skal være opfyldt" @@ -466,10 +734,6 @@ msgstr "Tilføj betingelse" msgid "and" msgstr "og" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Annullér" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Gem & Ny" @@ -478,10 +742,6 @@ msgstr "Gem & Ny" msgid "Save & Close" msgstr "Gem & Luk" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Eksportér" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -562,10 +822,6 @@ msgstr "Ny adgangskode:" msgid "Confirm Password:" msgstr "Bekræft adgangskode:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importér" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importér en .CSV fil" diff --git a/addons/web/po/de.po b/addons/web/po/de.po index 72778500484..4bbb190ed70 100644 --- a/addons/web/po/de.po +++ b/addons/web/po/de.po @@ -7,55 +7,271 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" -"PO-Revision-Date: 2011-10-10 20:59+0000\n" -"Last-Translator: Felix Schubert \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-03 10:42+0000\n" +"Last-Translator: Ferdinand @ Camptocamp \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Schließen" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Abbrechen" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Achtung der Datensatz wurde bearbeitet, alle Änderungen werden verworfen!" -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Suche mehr..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Anlegen \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Anlegen und Bearbeiten..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Erzeugen" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Import" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Export" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Sie müssen mindestens einen Datensatz auswählen" -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Warnung!" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Übersetzungen" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Speichern" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Schließen" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -84,10 +300,6 @@ msgstr "." msgid "Loading..." msgstr "Lade..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Erzeugen" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Löschen" @@ -280,16 +492,8 @@ msgid "View#" msgstr "Ansicht#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Felder" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Feldbeschreibung anzeigen" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" -msgstr "Seitenleiste bezieht sich auf" +msgid "More…" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Field" @@ -299,14 +503,6 @@ msgstr "Feld" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Übersetungsansicht" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Seitenleiste übersetzen" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Löschen" @@ -328,29 +524,13 @@ msgid "Last" msgstr "Ende" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Sichern & Bearbeiten" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Anlegen & Bearbeiten" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Neu" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Kopieren" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Lesezugriff/Bearbeitbar" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -373,6 +553,18 @@ msgstr "Hinzufügen" #: addons/web/static/src/xml/base.xml:0 msgid "Unhandled widget" +msgstr "unbekanntes Oberflächenelement" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -380,12 +572,64 @@ msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "Nr." +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Abgeschlossen" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "Nr." #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -419,18 +663,34 @@ msgstr "Speichern unter" msgid "Clear" msgstr "Leeren" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Erweiterter Filter" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filter --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Aktionen --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Filter speichern" @@ -447,6 +707,14 @@ msgstr "Filter Name:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Jeder existierende Filter mit dem selben Namen wird ersetzt)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Eine der folgenden Bedingungen muss zutreffen" @@ -467,10 +735,6 @@ msgstr "Bedingung hinzufügen" msgid "and" msgstr "und" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Abbrechen" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Speichern & Neu" @@ -479,10 +743,6 @@ msgstr "Speichern & Neu" msgid "Save & Close" msgstr "Speichern & Beenden" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Export" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -563,10 +823,6 @@ msgstr "Neues Passwort:" msgid "Confirm Password:" msgstr "Passwort bestätigen:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Import" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importiere eine .CSV Datei" diff --git a/addons/web/po/es.po b/addons/web/po/es.po index e53b5e2631b..a50baf3fe27 100644 --- a/addons/web/po/es.po +++ b/addons/web/po/es.po @@ -7,55 +7,271 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-19 07:27+0000\n" "Last-Translator: Amós Oviedo \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Cerrar" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Cancelar" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Advertencia, el registro se ha modificado, los cambios serán descartados." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Buscar más..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Crear \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Crear y Editar..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Crear" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importar" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Exportar" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Debe seleccionar al menos un registro." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Advertencia" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Traducciones" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Guardar" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Cerrar" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -84,10 +300,6 @@ msgstr "." msgid "Loading..." msgstr "Cargando…" -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Crear" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Eliminar" @@ -280,16 +492,8 @@ msgid "View#" msgstr "Vista#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Campos" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Ver etiquetas" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" -msgstr "Se relaciona con la barra lateral" +msgid "More…" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Field" @@ -299,14 +503,6 @@ msgstr "Campo" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Traducir vista" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Traducir barra lateral" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Borrar" @@ -328,29 +524,13 @@ msgid "Last" msgstr "Último" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Guardar y Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Crear y Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Nuevo" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplicar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Sólo Lectura/Editable" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -375,17 +555,81 @@ msgstr "Añadir" msgid "Unhandled widget" msgstr "Widget no controlado" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Hecho" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -419,18 +663,34 @@ msgstr "Guardar como" msgid "Clear" msgstr "Limpiar" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Filtro Avanzado" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtros --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Acciones --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Guardar Filtro" @@ -447,6 +707,14 @@ msgstr "Nombre del Filtro" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Cualquier filtro existente con el mismo nombre será reemplazado)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Cualquiera de las condiciones siguientes deben coincidir" @@ -467,10 +735,6 @@ msgstr "Añadir condición" msgid "and" msgstr "y" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Cancelar" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Guardar y Nuevo" @@ -479,10 +743,6 @@ msgstr "Guardar y Nuevo" msgid "Save & Close" msgstr "Guardar y Cerrar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Exportar" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -563,10 +823,6 @@ msgstr "Contraseña nueva:" msgid "Confirm Password:" msgstr "Confirmar la contraseña:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importar" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importar un archivo .CSV" diff --git a/addons/web/po/es_EC.po b/addons/web/po/es_EC.po index fc98c8bb536..0399ef57691 100644 --- a/addons/web/po/es_EC.po +++ b/addons/web/po/es_EC.po @@ -7,55 +7,271 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-07 18:16+0000\n" "Last-Translator: Cristian Salamea (Gnuthink) \n" "Language-Team: Spanish (Ecuador) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Cerrar" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Cancelar" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Aviso, el registro ha sido modificado, sus cambios serán descartados." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Buscar Más..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Crear \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Crear y Editar..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Crear" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importar" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Exportar" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Debe seleccionar al menos un registro." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Advertencia" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Traducciones" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Guardar" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Cerrar" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -84,10 +300,6 @@ msgstr "." msgid "Loading..." msgstr "Cargando..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Crear" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Borrar" @@ -280,16 +492,8 @@ msgid "View#" msgstr "View#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Campos" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Ver etiquetas" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" -msgstr "Columna lateral relacionada" +msgid "More…" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Field" @@ -299,14 +503,6 @@ msgstr "Campo" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Traducir vista" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Traducir Barra lateral" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Eliminar" @@ -328,29 +524,13 @@ msgid "Last" msgstr "Último" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Grabar & Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Crear & Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Nuevo" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplicar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Sólo Lectura/Editable" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -375,17 +555,81 @@ msgstr "Agregar" msgid "Unhandled widget" msgstr "Wdiget no controlado" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Realizado" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -419,18 +663,34 @@ msgstr "Guardar Como" msgid "Clear" msgstr "Limpiar" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Filtro Avanzado" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtros --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Acciones --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Guardar Filtro" @@ -447,6 +707,14 @@ msgstr "Nombre del Filtro:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Cualquier filtro existente con el mismo nombre será reemplazado)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Cualquiera de las siguientes condiciones debe coincidir" @@ -467,10 +735,6 @@ msgstr "Agregar condición" msgid "and" msgstr "y" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Cancelar" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Grabar & Nuevo" @@ -479,10 +743,6 @@ msgstr "Grabar & Nuevo" msgid "Save & Close" msgstr "Grabar & Cerrar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Exportar" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -563,10 +823,6 @@ msgstr "Nueva Password:" msgid "Confirm Password:" msgstr "Confirmar Password:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importar" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importar a archivo .CSV" diff --git a/addons/web/po/et.po b/addons/web/po/et.po index b9362cd0fdc..c03b0a051b7 100644 --- a/addons/web/po/et.po +++ b/addons/web/po/et.po @@ -7,54 +7,270 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-10 18:30+0000\n" "Last-Translator: Aare Vesi \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Tühista" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "" -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "" -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Loo" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Import" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Eksport" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "" -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Hoiatus" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Tõlked" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Salvesta" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "" @@ -83,10 +299,6 @@ msgstr "" msgid "Loading..." msgstr "Laadimine..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Loo" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Hülga" @@ -271,15 +483,7 @@ msgid "View#" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Väljad" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -290,14 +494,6 @@ msgstr "Väli" msgid ":" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Tõlke vaade" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Kustuta" @@ -319,29 +515,13 @@ msgid "Last" msgstr "Viimane" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" +msgid "Edit" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Salvesta & Muuda" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Loo & Muuda" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Uus" - #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Tee koopia" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "" @@ -366,18 +546,82 @@ msgstr "Lisa" msgid "Unhandled widget" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "#" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Valmis" - #: addons/web/static/src/xml/base.xml:0 msgid "Open..." msgstr "Ava..." @@ -410,18 +654,34 @@ msgstr "Salvesta kui" msgid "Clear" msgstr "Tühjenda" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Täiustatud filter" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Salvesta filter" @@ -438,6 +698,14 @@ msgstr "" msgid "(Any existing filter with the same name will be replaced)" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "" @@ -458,10 +726,6 @@ msgstr "Lisa tingimus" msgid "and" msgstr "ja" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Tühista" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "" @@ -470,10 +734,6 @@ msgstr "" msgid "Save & Close" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Eksport" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -550,10 +810,6 @@ msgstr "Uus salasõna:" msgid "Confirm Password:" msgstr "Kinnita salasõna:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Import" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "" diff --git a/addons/web/po/fr.po b/addons/web/po/fr.po index fcbcce3b1a7..3aa6679d04c 100644 --- a/addons/web/po/fr.po +++ b/addons/web/po/fr.po @@ -7,55 +7,271 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" -"PO-Revision-Date: 2011-10-23 12:20+0000\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-05 16:17+0000\n" "Last-Translator: Xavier (Open ERP) \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Fermer" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Attention, l'enregistrement a été modifié, vos changements seront perdus." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "" -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "" -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Créer" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "Rechercher : " + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Vous devez choisir au moins un enregistrement" -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Attention" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Traductions" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Enregistrer" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Fermer" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -84,10 +300,6 @@ msgstr "." msgid "Loading..." msgstr "Chargement..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Créer" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "" @@ -272,15 +484,7 @@ msgid "View#" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -291,14 +495,6 @@ msgstr "" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Supprimer" @@ -320,29 +516,13 @@ msgid "Last" msgstr "Dernier" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Enregistrer et éditer" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Créer et éditer" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" +msgid "Edit" msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Dupliquer" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -367,17 +547,81 @@ msgstr "" msgid "Unhandled widget" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" +msgid "(nolabel)" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Terminé" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -411,18 +655,34 @@ msgstr "" msgid "Clear" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "" @@ -439,6 +699,14 @@ msgstr "" msgid "(Any existing filter with the same name will be replaced)" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "" @@ -459,10 +727,6 @@ msgstr "" msgid "and" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "" @@ -471,10 +735,6 @@ msgstr "" msgid "Save & Close" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -551,10 +811,6 @@ msgstr "" msgid "Confirm Password:" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "" diff --git a/addons/web/po/gl.po b/addons/web/po/gl.po index 7a8fefab03c..daab85de3db 100644 --- a/addons/web/po/gl.po +++ b/addons/web/po/gl.po @@ -7,54 +7,270 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-19 07:54+0000\n" "Last-Translator: Amós Oviedo \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Pechar" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Cancelar" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "Advertencia, o rexistro modificouse, os cambios serán descartados." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Buscar máis..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Crear \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Crear e Editar..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Crear" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importar" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Exportar" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Debe seleccionar polo menos un rexistro." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Advertencia" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Traducións" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Gardar" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Pechar" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -83,10 +299,6 @@ msgstr "." msgid "Loading..." msgstr "Cargando…" -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Crear" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Eliminar" @@ -279,16 +491,8 @@ msgid "View#" msgstr "Vista#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Campos" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Ver etiquetas" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" -msgstr "Relaciónase coa barra lateral" +msgid "More…" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Field" @@ -298,14 +502,6 @@ msgstr "Campo" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Traducir vista" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Traducir barra lateral" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Borrar" @@ -327,29 +523,13 @@ msgid "Last" msgstr "Último" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Gardar e Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Crear e Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Novo" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplicar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Só Lectura/Editable" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -374,17 +554,81 @@ msgstr "Engadir" msgid "Unhandled widget" msgstr "Widget non controlado" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Feito" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -418,18 +662,34 @@ msgstr "Gardar como" msgid "Clear" msgstr "Limpar" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Filtro Avanzado" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtros --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Accións --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Gardar Filtro" @@ -446,6 +706,14 @@ msgstr "Nome do Filtro" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Calquer filtro existente co mesmo nome será reemplazado)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Calquera das condicións seguintes deben coincidir" @@ -466,10 +734,6 @@ msgstr "Engadir condición" msgid "and" msgstr "e" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Cancelar" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Gardar e Novo" @@ -478,10 +742,6 @@ msgstr "Gardar e Novo" msgid "Save & Close" msgstr "Gardar e Pechar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Exportar" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -562,10 +822,6 @@ msgstr "Contrasinal nova:" msgid "Confirm Password:" msgstr "Confirmar contrasinal:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importar" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importar un arquivo .CSV" diff --git a/addons/web/po/hr.po b/addons/web/po/hr.po new file mode 100644 index 00000000000..613039fa044 --- /dev/null +++ b/addons/web/po/hr.po @@ -0,0 +1,933 @@ +# Croatian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-11-28 14:05+0000\n" +"Last-Translator: Goran Kliska \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Zatvori" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Odustani" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 +msgid "" +"Warning, the record has been modified, your changes will be discarded." +msgstr "Upozorenje, zapis je promjenjen. Promjene se neće zapisati." + +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 +msgid "   Search More..." +msgstr "   Traži dalje..." + +#: addons/web/static/src/js/view_form.js:1893 +#, python-format +msgid "   Create \"%s\"" +msgstr "   Kreiraj \"%s\"" + +#: addons/web/static/src/js/view_form.js:1899 +msgid "   Create and Edit..." +msgstr "   Kreiraj i uredi..." + +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Kreiraj" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Uvoz" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Izvoz" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 +msgid "You must choose at least one record." +msgstr "Odaberite barem jedan zapis." + +#: addons/web/static/src/js/views.js:703 +msgid "Warning" +msgstr "Upozorenje" + +#: addons/web/static/src/js/views.js:737 +msgid "Translations" +msgstr "Prijevodi" + +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 +msgid "Save" +msgstr "Snimi" + +#: addons/web/static/src/xml/base.xml:0 +msgid "x" +msgstr "x" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{title}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{text}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Powered by" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "openerp.com" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Loading..." +msgstr "Učitavanje..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Drop" +msgstr "Obriši" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Backup" +msgstr "Arhiviranje/Backup" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Restore" +msgstr "Obnovi" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password" +msgstr "Zaporka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Back to Login" +msgstr "Nazad na prijavu" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CREATE DATABASE" +msgstr "Nova baza podataka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master password:" +msgstr "Glavna zaporka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New database name:" +msgstr "Naziv nove baze podataka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Load Demonstration data:" +msgstr "Učitaj demonstracijske podatke:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Default language:" +msgstr "Zadani jezik:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Admin password:" +msgstr "Lozinka administratora" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm password:" +msgstr "Potvrda lozinke:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "DROP DATABASE" +msgstr "Briši bazu podataka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database:" +msgstr "Baza podataka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master Password:" +msgstr "Glavna lozinka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "BACKUP DATABASE" +msgstr "Backup baze podataka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "RESTORE DATABASE" +msgstr "Obnovi bazu podatka (restore)" + +#: addons/web/static/src/xml/base.xml:0 +msgid "File:" +msgstr "Datoteka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CHANGE MASTER PASSWORD" +msgstr "Promjeni glavnu zaporku" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New master password:" +msgstr "Nova glavna zaporka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm new master password:" +msgstr "Potvrdi glavnu zaporku:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User:" +msgstr "Korisnik:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password:" +msgstr "Zaporka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database" +msgstr "Baza podataka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Login" +msgstr "Korisničko ime" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Bad username or password" +msgstr "Neispravno korisničko ime ili lozinka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"We think that daily job activities can be more intuitive, efficient, " +"automated, .. and even fun." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP's vision to be:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Full featured" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Today's enterprise challenges are multiple. We provide one module for each " +"need." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open Source" +msgstr "Otvorenog koda" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"To Build a great product, we rely on the knowledge of thousands of " +"contributors." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User Friendly" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"In order to be productive, people need clean and easy to use interface." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ")" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "LOGOUT" +msgstr "ODJAVA" + +#: addons/web/static/src/xml/base.xml:0 +msgid "«" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "»" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_menu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_submenu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Hide this tip" +msgstr "Sakrij savjet" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Disable all tips" +msgstr "Sakrij sve savjete" + +#: addons/web/static/src/xml/base.xml:0 +msgid "View#" +msgstr "Pogled#" + +#: addons/web/static/src/xml/base.xml:0 +msgid "More…" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field" +msgstr "Polje" + +#: addons/web/static/src/xml/base.xml:0 +msgid ":" +msgstr ":" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delete" +msgstr "Obriši" + +#: addons/web/static/src/xml/base.xml:0 +msgid "First" +msgstr "Prvi" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<" +msgstr "<" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">" +msgstr ">" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Last" +msgstr "Posljednji" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Edit" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Duplicate" +msgstr "Dupliciraj" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<<" +msgstr "<<" + +#: addons/web/static/src/xml/base.xml:0 +msgid "0" +msgstr "0" + +#: addons/web/static/src/xml/base.xml:0 +msgid "/" +msgstr "/" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">>" +msgstr ">>" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add" +msgstr "Dodaj" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Unhandled widget" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "?" +msgstr "?" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open..." +msgstr "Otvori…" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Create..." +msgstr "Kreiraj..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Search..." +msgstr "Traži…" + +#: addons/web/static/src/xml/base.xml:0 +msgid "..." +msgstr "..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Uploading ..." +msgstr "Učitavanje..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select" +msgstr "Odaberi" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save As" +msgstr "Spremi kao" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Clear" +msgstr "Očisti" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Advanced Filter" +msgstr "Napredni filter" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save Filter" +msgstr "Spremi filter" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Manage Filters" +msgstr "Uredi filtere" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Filter Name:" +msgstr "Naziv" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(Any existing filter with the same name will be replaced)" +msgstr "(Zamjenit će postojeći filter istog naziva)" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Any of the following conditions must match" +msgstr "Barem jedan od uvjeta zadovoljava" + +#: addons/web/static/src/xml/base.xml:0 +msgid "All the following conditions must match" +msgstr "Svi uvjeti zadovoljavaju" + +#: addons/web/static/src/xml/base.xml:0 +msgid "None of the following conditions must match" +msgstr "Niti jedan od uvjeta zadovoljava" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add condition" +msgstr "Dodaj uvjet" + +#: addons/web/static/src/xml/base.xml:0 +msgid "and" +msgstr "i" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & New" +msgstr "Spremi i novi" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & Close" +msgstr "Snimi i zatvori" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"This wizard will export all data that matches the current search criteria to " +"a CSV file.\n" +" You can export all data or only the fields that can be " +"reimported after modification." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Type:" +msgstr "Vrsta izvoza:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Compatible Export" +msgstr "Izvoz kompatibilan uvozu" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export all Data" +msgstr "Izvoz svih podataka" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Formats" +msgstr "Formati izvoza" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Available fields" +msgstr "Dostupna polja" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Fields to export" +msgstr "Polja za izvoz" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save fields list" +msgstr "Snimi popis polja" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove" +msgstr "Ukloni" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove All" +msgstr "Ukloni sve" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Name" +msgstr "Naziv" + +#: addons/web/static/src/xml/base.xml:0 +msgid " " +msgstr " " + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save as:" +msgstr "Spremi kao:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Ok" +msgstr "U redu" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Saved exports:" +msgstr "Snimljeni izvozi" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Old Password:" +msgstr "Stara lozinka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New Password:" +msgstr "Nova lozinka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm Password:" +msgstr "Potvrda lozinke:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "1. Import a .CSV file" +msgstr "Uvezi .CSV datoteku" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Select a .CSV file to import. If you need a sample of file to import,\n" +" you should use the export tool with the \"Import Compatible\" option." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CSV File:" +msgstr "CSV datoteka:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "2. Check your file format" +msgstr "2. Provjera formata datoteke" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Options" +msgstr "Opcije uvoza" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Does your file have titles?" +msgstr "Datoteka ima naslove" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Separator:" +msgstr "Razdjelnik:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delimiter:" +msgstr "Graničnik:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Encoding:" +msgstr "Kodna stranica:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "UTF-8" +msgstr "UTF-8" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Latin 1" +msgstr "Latin 1" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Lines to skip" +msgstr "Preskočiti linija" + +#: addons/web/static/src/xml/base.xml:0 +msgid "The import failed due to:" +msgstr "Uvoz nije izvršen:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Here is a preview of the file we could not import:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP Web" +msgstr "OpenERP Web" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Version" +msgstr "Verzija" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved." +msgstr "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved." + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP is a trademark of the" +msgstr "OpenERP is a trademark of the" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP SA Company" +msgstr "OpenERP SA Company" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Licenced under the terms of" +msgstr "Licenced under the terms of" + +#: addons/web/static/src/xml/base.xml:0 +msgid "GNU Affero General Public License" +msgstr "GNU Affero General Public License" + +#: addons/web/static/src/xml/base.xml:0 +msgid "About OpenERP" +msgstr "O OpenERP" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP" +msgstr "OpenERP" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"is a free enterprise-scale software system that is designed to boost\n" +" productivity and profit through data integration. It connects, " +"improves and\n" +" manages business processes in areas such as sales, finance, " +"supply chain,\n" +" project management, production, services, CRM, etc..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"The system is platform-independent, and can be installed on Windows, Mac OS " +"X,\n" +" and various Linux and other Unix-based distributions. Its " +"architecture enables\n" +" new functionality to be rapidly created, modifications to be " +"made to a\n" +" production system and migration to a new version to be " +"straightforward." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Depending on your needs, OpenERP is available through a web or application " +"client." +msgstr "" diff --git a/addons/web/po/it.po b/addons/web/po/it.po index a3899989d7e..1ba1dfc48bc 100644 --- a/addons/web/po/it.po +++ b/addons/web/po/it.po @@ -7,56 +7,272 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-08 13:39+0000\n" "Last-Translator: Nicola Riolini - Micronaet \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Chiudi" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Annulla" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Attenzione, il record è stato modificato, i vostri cambiamenti verranno " "scartati." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Cerca ancora..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Crea \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Crea e modifica..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Crea" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importa" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Esporta" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "E' necessario selezionare almeno un record." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Attenzione" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Traduzioni" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Salva" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Chiudi" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -85,10 +301,6 @@ msgstr "." msgid "Loading..." msgstr "Caricamento..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Crea" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Elimina" @@ -281,15 +493,7 @@ msgid "View#" msgstr "Vista à" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Campi" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Visualizza etichette" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -300,14 +504,6 @@ msgstr "Campo" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Traduci vista" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Traduci barra laterale" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Elimina" @@ -329,29 +525,13 @@ msgid "Last" msgstr "Ultimo" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Salva & Modifica" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Crea & Modifica" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Nuovo" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplica" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Sola lettura / Modificabile" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -376,17 +556,81 @@ msgstr "Aggiungi" msgid "Unhandled widget" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Completato" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -420,18 +664,34 @@ msgstr "Salva come" msgid "Clear" msgstr "Pulisci" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Filtro avanzato" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtri --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Azioni --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Salva Filtro" @@ -448,6 +708,14 @@ msgstr "Nome filtro:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Eventuali filtri esistenti con lo stesso nome saranno rimpiazzati)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "" @@ -468,10 +736,6 @@ msgstr "Aggiungi condizione" msgid "and" msgstr "e" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Annulla" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Salva & Nuovo" @@ -480,10 +744,6 @@ msgstr "Salva & Nuovo" msgid "Save & Close" msgstr "Salva & Chiudi" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Esporta" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -560,10 +820,6 @@ msgstr "Nuova password:" msgid "Confirm Password:" msgstr "Conferma password:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importa" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importa un file .CSV" diff --git a/addons/web/po/nl.po b/addons/web/po/nl.po new file mode 100644 index 00000000000..8883dd62683 --- /dev/null +++ b/addons/web/po/nl.po @@ -0,0 +1,965 @@ +# Dutch translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-06 11:39+0000\n" +"Last-Translator: Douwe Wullink (Dypalio) \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-07 05:25+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Sluiten" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "Bestand importeren" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "Externe ID" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "Filter regel" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Annuleren" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "OK" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "Aan dashboard toevoegen" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "Ongeldige zoekopdracht" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "Onjuiste waarde bij veld %(fieldname)s: [%(value)s] is %(message)s" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "geen geldig geheel getal" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "geen geldig getal" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "bevat" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "bevat niet" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "is gelijk aan" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "is niet gelijk aan" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "is groter dan" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "kleiner dan" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "is groter of gelijk aan" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "is kleiner of gelijk aan" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "is" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "is niet" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "is waar" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "is onwaar" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "Wilt u deze weergave werkelijk verwijderen?" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "Wilt u dit knooppunt werkelijk verwijderen?" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "Wilt u dit record werkelijk verwijderen?" + +#: addons/web/static/src/js/view_form.js:448 +msgid "" +"Warning, the record has been modified, your changes will be discarded." +msgstr "Letop: het record is gewijzigd; uw wijzigingen gaan verloren." + +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "Bijlages" + +#: addons/web/static/src/js/view_form.js:1880 +msgid "   Search More..." +msgstr "   Zoek verder..." + +#: addons/web/static/src/js/view_form.js:1893 +#, python-format +msgid "   Create \"%s\"" +msgstr "   Maak \"%s\"" + +#: addons/web/static/src/js/view_form.js:1899 +msgid "   Create and Edit..." +msgstr "   Maak en wijzig..." + +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Maken" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "Onbeperkt" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "Wilt u deze records werkelijk verwijderen?" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "Onbepaald" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "Zoeken: " + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "Aanpassen" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "Weergaven beheren" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "Weergaven van huidig object beheren" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "Workflow wijzigen" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "Object aanpassen" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "Vertalen" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "Technische vertaling" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "Overige opties" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importeren" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Exporteren" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "Log bekijken" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "Overzichten" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "Acties" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "Verwijzingen" + +#: addons/web/static/src/js/views.js:702 +msgid "You must choose at least one record." +msgstr "U moet tenminste één record kiezen." + +#: addons/web/static/src/js/views.js:703 +msgid "Warning" +msgstr "Waarschuwing" + +#: addons/web/static/src/js/views.js:737 +msgid "Translations" +msgstr "Vertalingen" + +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 +msgid "Save" +msgstr "Opslaan" + +#: addons/web/static/src/xml/base.xml:0 +msgid "x" +msgstr "x" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{title}" +msgstr "#{title}" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{text}" +msgstr "#{text}" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Powered by" +msgstr "Powered by" + +#: addons/web/static/src/xml/base.xml:0 +msgid "openerp.com" +msgstr "openerp.com" + +#: addons/web/static/src/xml/base.xml:0 +msgid "." +msgstr "." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Loading..." +msgstr "Laden..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Drop" +msgstr "Verwijderen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Backup" +msgstr "Backup" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Restore" +msgstr "Terugzetten" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password" +msgstr "Wachtwoord" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Back to Login" +msgstr "Terug naar aanmelding" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CREATE DATABASE" +msgstr "DATABASE MAKEN" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master password:" +msgstr "Master wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New database name:" +msgstr "Naam nieuwe database:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Load Demonstration data:" +msgstr "Demonstratiegegevens laden:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Default language:" +msgstr "Standaardtaal:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Admin password:" +msgstr "Admin wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm password:" +msgstr "Bevestig wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "DROP DATABASE" +msgstr "DATABASE VERWIJDEREN" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database:" +msgstr "Database:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master Password:" +msgstr "Master wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "BACKUP DATABASE" +msgstr "DATABASE BACKUP" + +#: addons/web/static/src/xml/base.xml:0 +msgid "RESTORE DATABASE" +msgstr "DATABASE TERUGZETTEN" + +#: addons/web/static/src/xml/base.xml:0 +msgid "File:" +msgstr "Bestand:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CHANGE MASTER PASSWORD" +msgstr "MASTER WACHTWOORD WIJZIGEN" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New master password:" +msgstr "Nieuw master wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm new master password:" +msgstr "Bevestig nieuw master wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User:" +msgstr "Gebruiker:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password:" +msgstr "Wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database" +msgstr "Database" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Login" +msgstr "Aanmelden" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Bad username or password" +msgstr "Verkeerde gebruikersnaam of wachtwoord" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"We think that daily job activities can be more intuitive, efficient, " +"automated, .. and even fun." +msgstr "" +"Wij denken dat dagelijks werk intuïtiever, efficiënter, automatischer kan " +"zijn, ...en zelfs leuk." + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP's vision to be:" +msgstr "OpenERP's visie is:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Full featured" +msgstr "Uitgebreide functionaliteit" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Today's enterprise challenges are multiple. We provide one module for each " +"need." +msgstr "" +"Bedrijven kennen vandaag de dag veel uitdagingen. We hebben een module voor " +"elke behoefte." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open Source" +msgstr "Open Source" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"To Build a great product, we rely on the knowledge of thousands of " +"contributors." +msgstr "" +"Om een prima product te bouwen, rekenen we op de kennis van duizenden " +"bijdragers." + +#: addons/web/static/src/xml/base.xml:0 +msgid "User Friendly" +msgstr "Gebruikersvriendelijk" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"In order to be productive, people need clean and easy to use interface." +msgstr "" +"Om productief te zijn hebben mensen een net en simpel gebruikersinterface " +"nodig." + +#: addons/web/static/src/xml/base.xml:0 +msgid "(" +msgstr "(" + +#: addons/web/static/src/xml/base.xml:0 +msgid ")" +msgstr ")" + +#: addons/web/static/src/xml/base.xml:0 +msgid "LOGOUT" +msgstr "AFMELDEN" + +#: addons/web/static/src/xml/base.xml:0 +msgid "«" +msgstr "«" + +#: addons/web/static/src/xml/base.xml:0 +msgid "»" +msgstr "»" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_menu_item" +msgstr "oe_secondary_menu_item" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_submenu_item" +msgstr "oe_secondary_submenu_item" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Hide this tip" +msgstr "Verberg deze tip" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Disable all tips" +msgstr "Alle tips uitzetten" + +#: addons/web/static/src/xml/base.xml:0 +msgid "View#" +msgstr "View#" + +#: addons/web/static/src/xml/base.xml:0 +msgid "More…" +msgstr "Meer..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field" +msgstr "Veld" + +#: addons/web/static/src/xml/base.xml:0 +msgid ":" +msgstr ":" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delete" +msgstr "Verwijderen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "First" +msgstr "Eerste" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<" +msgstr "<" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">" +msgstr ">" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Last" +msgstr "Laatste" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Edit" +msgstr "Wijzigen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Duplicate" +msgstr "Dupliceren" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<<" +msgstr "<<" + +#: addons/web/static/src/xml/base.xml:0 +msgid "0" +msgstr "0" + +#: addons/web/static/src/xml/base.xml:0 +msgid "/" +msgstr "/" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">>" +msgstr ">>" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add" +msgstr "Toevoegen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Unhandled widget" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "\"" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "?" +msgstr "?" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "(nolabel)" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "Veld:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "Object:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "Soort:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "Widget:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "Grootte:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "Context:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "Domein:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "On change:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "Relatie:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "Selectie:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "[" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "]" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "-" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open..." +msgstr "Openen..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Create..." +msgstr "Aanmaken…" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Search..." +msgstr "Zoeken…" + +#: addons/web/static/src/xml/base.xml:0 +msgid "..." +msgstr "..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Uploading ..." +msgstr "Uploaden ..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select" +msgstr "Selecteren" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save As" +msgstr "Opslaan als" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Clear" +msgstr "Wissen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "Button" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "(no string)" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "Special:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "Button Type:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "Method:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "Action ID:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Advanced Filter" +msgstr "Geavanceerd filter" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save Filter" +msgstr "Filter opslaan" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Manage Filters" +msgstr "Filters beheren" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Filter Name:" +msgstr "Filternaam:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(Any existing filter with the same name will be replaced)" +msgstr "(Een bestaand filter met dezelfde naam wordt vervangen)" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "Selecteer Dashboard om dit filter aan toe te voegen:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "Titel van nieuw dashboard item:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Any of the following conditions must match" +msgstr "Één van de volgende voorwaarden moet voldoen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "All the following conditions must match" +msgstr "Alle volgende voorwaarden moeten voldoen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "None of the following conditions must match" +msgstr "Geen van de volgende voorwaarden mag voldoen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add condition" +msgstr "Voorwaarde toevoegen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "and" +msgstr "en" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & New" +msgstr "Opslaan & Nieuw" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & Close" +msgstr "Opslaan & Sluiten" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"This wizard will export all data that matches the current search criteria to " +"a CSV file.\n" +" You can export all data or only the fields that can be " +"reimported after modification." +msgstr "" +"Deze assistent exporteert alle gegevens die aan de huidige zoekcriteria " +"voldoen naar een CSV bestand.\n" +" U kunt alle gegevens exporteren of alleen de velden die na " +"wijziging opnieuw kunnen worden geïmporteerd." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Type:" +msgstr "Soort export:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Compatible Export" +msgstr "Import compatibele export" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export all Data" +msgstr "Alle gegevens exporteren" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Formats" +msgstr "Export Formaten" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Available fields" +msgstr "Beschikbare velden" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Fields to export" +msgstr "Te exporteren velden" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save fields list" +msgstr "Veldenlijst opslaan" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove" +msgstr "Verwijderen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove All" +msgstr "Alles verwijderen" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Name" +msgstr "Naam" + +#: addons/web/static/src/xml/base.xml:0 +msgid " " +msgstr " " + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save as:" +msgstr "Opslaan als:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Ok" +msgstr "Ok" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Saved exports:" +msgstr "Opgeslagen exports:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Old Password:" +msgstr "Oud wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New Password:" +msgstr "Nieuw wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm Password:" +msgstr "Bevestig wachtwoord:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "1. Import a .CSV file" +msgstr "1. Importeer een .CSV bestand" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Select a .CSV file to import. If you need a sample of file to import,\n" +" you should use the export tool with the \"Import Compatible\" option." +msgstr "" +"Selecteer een .CSV bestand voor import. Voor een voorbeeld van een " +"importbestand,\n" +" kunt u de export tool gebruiken met de \"Import Compatibel\" optie." + +#: addons/web/static/src/xml/base.xml:0 +msgid "CSV File:" +msgstr "CSV bestand:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "2. Check your file format" +msgstr "2. Controleer uw bestandsformaat" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Options" +msgstr "Importeeropties" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Does your file have titles?" +msgstr "Heeft uw bestand titels?" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Separator:" +msgstr "Scheidingsteken:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delimiter:" +msgstr "Veldscheidingsteken:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Encoding:" +msgstr "Codering:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "UTF-8" +msgstr "UTF-8" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Latin 1" +msgstr "Latin 1" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Lines to skip" +msgstr "Regels om over te slaan" + +#: addons/web/static/src/xml/base.xml:0 +msgid "The import failed due to:" +msgstr "Importeren mislukt wegens:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Here is a preview of the file we could not import:" +msgstr "Hier is een voorbeeld van het bestand dat we niet konden importeren:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP Web" +msgstr "OpenERP Web" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Version" +msgstr "Versie" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved." +msgstr "Copyright © 2011-VANDAAG OpenERP SA. Alle rechten voorbehouden." + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP is a trademark of the" +msgstr "OpenERP is een handelsmerk van" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP SA Company" +msgstr "OpenERP SA" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Licenced under the terms of" +msgstr "Gelicentieerd onder voorwaarden van" + +#: addons/web/static/src/xml/base.xml:0 +msgid "GNU Affero General Public License" +msgstr "GNU Affero General Public License" + +#: addons/web/static/src/xml/base.xml:0 +msgid "About OpenERP" +msgstr "Over OpenERP" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP" +msgstr "OpenERP" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"is a free enterprise-scale software system that is designed to boost\n" +" productivity and profit through data integration. It connects, " +"improves and\n" +" manages business processes in areas such as sales, finance, " +"supply chain,\n" +" project management, production, services, CRM, etc..." +msgstr "" +"is een vrij verkrijgbaar bedrijfsniveau software pakket dat is ontworpen om " +"uw productiviteit\n" +" en winst te verhogen door data integratie. Het verbindt, " +"verbetert en beheert\n" +" bedrijfsprocessen op gebieden zoals verkoop, financiën, inkoop, " +"project management,\n" +" productie, diensten, CRM, etc..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"The system is platform-independent, and can be installed on Windows, Mac OS " +"X,\n" +" and various Linux and other Unix-based distributions. Its " +"architecture enables\n" +" new functionality to be rapidly created, modifications to be " +"made to a\n" +" production system and migration to a new version to be " +"straightforward." +msgstr "" +"Het systeem is platform-onafhankelijk, and kan geïnstalleerd worden op " +"Windows, Mac OS X,\n" +" en verschillende Linux en andere Unix-achtige distributies. Haar " +"architectuur maakt het\n" +" mogelijk om snel nieuwe functionaliteit te maken, wijzigingen " +"aan te brengen aan een \n" +" productie systeem en migraties naar een nieuwe versie eenvoudig " +"te houden." + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Depending on your needs, OpenERP is available through a web or application " +"client." +msgstr "" +"Naar behoefte is OpenERP als webapplicatie of als client-serverapplicatie " +"beschikbaar." diff --git a/addons/web/po/nl_BE.po b/addons/web/po/nl_BE.po index 43f52ade62e..be3446e6e22 100644 --- a/addons/web/po/nl_BE.po +++ b/addons/web/po/nl_BE.po @@ -7,56 +7,272 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-07 12:50+0000\n" "Last-Translator: Niels Huylebroeck \n" "Language-Team: Dutch (Belgium) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Sluiten" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Annuleren" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Opgelet, het record werd gewijzigd, uw veranderingen zullen niet opgeslagen " "worden." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Uitgebreid zoeken..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Creër \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Creër en bewerk..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Creër" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importeren" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Exporteren" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "U moet minstens een record selecteren." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Waarschuwing" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Vertalingen" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Opslaan" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Sluiten" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -85,10 +301,6 @@ msgstr "." msgid "Loading..." msgstr "Laden..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Creër" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Drop" @@ -281,15 +493,7 @@ msgid "View#" msgstr "View#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Velden" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Toon labels" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -300,14 +504,6 @@ msgstr "Veld" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Vertaal scherm" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Vertaal balk" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Verwijder" @@ -329,29 +525,13 @@ msgid "Last" msgstr "Laatste" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Opslaan & Bewerken" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Creër & Bewerk" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Nieuw" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Dupliceer" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -376,17 +556,81 @@ msgstr "Toevoegen" msgid "Unhandled widget" msgstr "Niet-verwerkbare widget" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Voltooid" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -420,18 +664,34 @@ msgstr "Opslaan als" msgid "Clear" msgstr "Leegmaken" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Geavanceerde filter" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filters --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Acties --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Filter opslaan" @@ -448,6 +708,14 @@ msgstr "Filternaam:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Bestaande filters met dezelfde naam worden overschreven)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Een van de volgende voorwaarden moet overeenstemmen" @@ -468,10 +736,6 @@ msgstr "Voorwaarde toevoegen" msgid "and" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Annuleren" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Opslaan & Nieuwe" @@ -480,10 +744,6 @@ msgstr "Opslaan & Nieuwe" msgid "Save & Close" msgstr "Opslaan & Sluiten" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Exporteren" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -560,10 +820,6 @@ msgstr "Nieuw wachtwoord:" msgid "Confirm Password:" msgstr "Bevestig wachtwoord:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importeren" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importeer een .CSV bestand" diff --git a/addons/web/po/pl.po b/addons/web/po/pl.po index 56f004a0197..646e1b7f620 100644 --- a/addons/web/po/pl.po +++ b/addons/web/po/pl.po @@ -7,54 +7,270 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-04 16:44+0000\n" "Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Zamknij" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Anuluj" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "Uwaga, rekord został zmodyfikowany, twoje zmiany zostaną odrzucone." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Szukaj dalej..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Utwórz \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Utwórz i edytuj..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Utwórz" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importuj" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Eksportuj" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Musisz wybrac co najmniej jeden rekord." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Ostrzeżenie" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Tłumaczenia" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Zapisz" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Zamknij" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "" @@ -83,10 +299,6 @@ msgstr "" msgid "Loading..." msgstr "Wczytywanie..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Utwórz" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Usuń bazę danych" @@ -274,15 +486,7 @@ msgid "View#" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Pola" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Pokaż etykiety" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -293,14 +497,6 @@ msgstr "Pole" msgid ":" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Przetłumacz widok" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Usuń" @@ -322,29 +518,13 @@ msgid "Last" msgstr "Ostatnie" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" +msgid "Edit" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Zapisz i edytuj" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Utwórz i edytuj" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Nowy" - #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplikuj" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Tylko odczyt/Edytowalne" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "" @@ -369,18 +549,82 @@ msgstr "Dodaj" msgid "Unhandled widget" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "#" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Wykonano" - #: addons/web/static/src/xml/base.xml:0 msgid "Open..." msgstr "Otwórz..." @@ -413,18 +657,34 @@ msgstr "Zapisz jako" msgid "Clear" msgstr "Wyczyść" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Zaawansowany filtr" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtry --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Akcje --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Zapisz filtr" @@ -441,6 +701,14 @@ msgstr "Nazwa filtra:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Każdy filtr o tej samej nazwie zostanie zamazany)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Jeden z tych warunków musi być spełniony" @@ -461,10 +729,6 @@ msgstr "Dodaj warunek" msgid "and" msgstr "i" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Anuluj" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Zapisz i nowy" @@ -473,10 +737,6 @@ msgstr "Zapisz i nowy" msgid "Save & Close" msgstr "Zapisz i zamknij" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Eksportuj" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -557,10 +817,6 @@ msgstr "Nowe hasło:" msgid "Confirm Password:" msgstr "Potwierdź hasło:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importuj" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importuj plik .CSV" diff --git a/addons/web/po/pt.po b/addons/web/po/pt.po index ca98e18bce9..b9b0da9f5b2 100644 --- a/addons/web/po/pt.po +++ b/addons/web/po/pt.po @@ -7,55 +7,271 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-21 22:22+0000\n" "Last-Translator: Daniel Reis \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-22 05:13+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Fechar" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Cancelar" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Atenção, o o registo foi modificado, as suas alterações serão descartadas." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "" -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "" -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Criar" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importar" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Exportar" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Escolha pelo menos um registo." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Aviso" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Traduções" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Guardar" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Fechar" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -84,10 +300,6 @@ msgstr "" msgid "Loading..." msgstr "A carregar ..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Criar" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Excluir" @@ -280,15 +492,7 @@ msgid "View#" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Campos" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Ver etiquetas" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -299,14 +503,6 @@ msgstr "Campo" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Traduzir vista" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Traduzir barra lateral" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Apagar" @@ -328,29 +524,13 @@ msgid "Last" msgstr "Último" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Gravar & Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Criar & Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Novo" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplicar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -375,17 +555,81 @@ msgstr "Acrescentar" msgid "Unhandled widget" msgstr "Widget não tratado" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Concluído" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -419,18 +663,34 @@ msgstr "Guardar como" msgid "Clear" msgstr "Limpar" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Filtro avançados" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtros --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Ações --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Guardar filtro" @@ -447,6 +707,14 @@ msgstr "Nome do filtro:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(filtros existentes com esse nome serão substituídos)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Deve satisfazer alguma das seguintes condições" @@ -467,10 +735,6 @@ msgstr "Acrescentar condição" msgid "and" msgstr "e" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Cancelar" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Guardar & Novo" @@ -479,10 +743,6 @@ msgstr "Guardar & Novo" msgid "Save & Close" msgstr "Guardar & Fechar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Exportar" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -559,10 +819,6 @@ msgstr "Nova senha:" msgid "Confirm Password:" msgstr "Confirme a senha:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importar" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Importar um ficheiro .CSV" diff --git a/addons/web/po/pt_BR.po b/addons/web/po/pt_BR.po index b80ea3a78bd..6cf08e0646e 100644 --- a/addons/web/po/pt_BR.po +++ b/addons/web/po/pt_BR.po @@ -7,54 +7,270 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-12 18:57+0000\n" "Last-Translator: Cristiano Gavião \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Fechar" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Cancelar" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "Aviso, o registro foi modificado, suas alterações serão descartadas." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Procurar Mais..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "" -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Criar" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Importar" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Exportar" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "" -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Fechar" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "" @@ -83,10 +299,6 @@ msgstr "" msgid "Loading..." msgstr "Carregando..." -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Criar" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Soltar" @@ -277,15 +489,7 @@ msgid "View#" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -296,14 +500,6 @@ msgstr "" msgid ":" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Visão de Tradução" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Excluir" @@ -325,29 +521,13 @@ msgid "Last" msgstr "Último" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" +msgid "Edit" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Salvar & Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Criar & Editar" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Novo" - #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Duplicar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Apenas Leitura/Editável" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "" @@ -372,18 +552,82 @@ msgstr "Adicionar" msgid "Unhandled widget" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "#" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Concluído" - #: addons/web/static/src/xml/base.xml:0 msgid "Open..." msgstr "Abrir..." @@ -416,18 +660,34 @@ msgstr "Salvar como" msgid "Clear" msgstr "Limpar" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Filtro Avançado" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtros --" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Ações --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Salvar filtro" @@ -444,6 +704,14 @@ msgstr "Nome do Filtro" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Qualquer filtro existente com o mesmo nome será substituído)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Qualquer das seguintes condições deve ser verdadeira" @@ -464,10 +732,6 @@ msgstr "Adicionar condição" msgid "and" msgstr "e" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Cancelar" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Salvar & Novo" @@ -476,10 +740,6 @@ msgstr "Salvar & Novo" msgid "Save & Close" msgstr "Salvar & Fechar" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Exportar" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -556,10 +816,6 @@ msgstr "Nova Senha:" msgid "Confirm Password:" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Importar" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "Importar um arquivo CSV." diff --git a/addons/web/po/ru.po b/addons/web/po/ru.po new file mode 100644 index 00000000000..d515b9ed67c --- /dev/null +++ b/addons/web/po/ru.po @@ -0,0 +1,933 @@ +# Russian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-06 08:05+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-07 05:25+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 +msgid "" +"Warning, the record has been modified, your changes will be discarded." +msgstr "" + +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 +msgid "   Search More..." +msgstr "" + +#: addons/web/static/src/js/view_form.js:1893 +#, python-format +msgid "   Create \"%s\"" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1899 +msgid "   Create and Edit..." +msgstr "" + +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 +msgid "You must choose at least one record." +msgstr "" + +#: addons/web/static/src/js/views.js:703 +msgid "Warning" +msgstr "" + +#: addons/web/static/src/js/views.js:737 +msgid "Translations" +msgstr "" + +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 +msgid "Save" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "x" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{title}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{text}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Powered by" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "openerp.com" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Loading..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Drop" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Backup" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Restore" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Back to Login" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CREATE DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New database name:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Load Demonstration data:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Default language:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Admin password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "DROP DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "BACKUP DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "RESTORE DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "File:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CHANGE MASTER PASSWORD" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New master password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm new master password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Login" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Bad username or password" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"We think that daily job activities can be more intuitive, efficient, " +"automated, .. and even fun." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP's vision to be:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Full featured" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Today's enterprise challenges are multiple. We provide one module for each " +"need." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open Source" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"To Build a great product, we rely on the knowledge of thousands of " +"contributors." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User Friendly" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"In order to be productive, people need clean and easy to use interface." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ")" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "LOGOUT" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "«" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "»" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_menu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_submenu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Hide this tip" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Disable all tips" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "View#" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "More…" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ":" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delete" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "First" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Last" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Edit" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Duplicate" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<<" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "0" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "/" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">>" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Unhandled widget" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "?" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Create..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Search..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Uploading ..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save As" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Clear" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Advanced Filter" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save Filter" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Manage Filters" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Filter Name:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(Any existing filter with the same name will be replaced)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Any of the following conditions must match" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "All the following conditions must match" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "None of the following conditions must match" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add condition" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "and" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & New" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & Close" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"This wizard will export all data that matches the current search criteria to " +"a CSV file.\n" +" You can export all data or only the fields that can be " +"reimported after modification." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Compatible Export" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export all Data" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Formats" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Available fields" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Fields to export" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save fields list" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove All" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Name" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid " " +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save as:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Ok" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Saved exports:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Old Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm Password:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "1. Import a .CSV file" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Select a .CSV file to import. If you need a sample of file to import,\n" +" you should use the export tool with the \"Import Compatible\" option." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CSV File:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "2. Check your file format" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Options" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Does your file have titles?" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Separator:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delimiter:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Encoding:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "UTF-8" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Latin 1" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Lines to skip" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "The import failed due to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Here is a preview of the file we could not import:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP Web" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Version" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP is a trademark of the" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP SA Company" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Licenced under the terms of" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "GNU Affero General Public License" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "About OpenERP" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"is a free enterprise-scale software system that is designed to boost\n" +" productivity and profit through data integration. It connects, " +"improves and\n" +" manages business processes in areas such as sales, finance, " +"supply chain,\n" +" project management, production, services, CRM, etc..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"The system is platform-independent, and can be installed on Windows, Mac OS " +"X,\n" +" and various Linux and other Unix-based distributions. Its " +"architecture enables\n" +" new functionality to be rapidly created, modifications to be " +"made to a\n" +" production system and migration to a new version to be " +"straightforward." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Depending on your needs, OpenERP is available through a web or application " +"client." +msgstr "" diff --git a/addons/web/po/sl.po b/addons/web/po/sl.po index 585dae78293..f48d6a2145d 100644 --- a/addons/web/po/sl.po +++ b/addons/web/po/sl.po @@ -7,55 +7,271 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-19 07:07+0000\n" "Last-Translator: Anze (Neotek) \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:58+0000\n" +"X-Generator: Launchpad (build 14435)\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "Zapri" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "Prekliči" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "" "Warning, the record has been modified, your changes will be discarded." msgstr "" "Opozorilo, zapis je bil spremenjen, zato bodo vaše spremembe zavržene." -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "   Iskanje več..." -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "   Ustvari \"%s\"" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "   Ustvari in uredi..." -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "Ustvari" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "Uvozi" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "Izvozi" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "Izbrati morate vsaj en zapis." -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "Opozorilo" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "Prevodi" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "Shrani" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "Zapri" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "x" @@ -84,10 +300,6 @@ msgstr "." msgid "Loading..." msgstr "Nalaganje …" -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "Ustvari" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "Izbriši" @@ -278,16 +490,8 @@ msgid "View#" msgstr "Ogled#" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "Polja" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "Ogled oznak" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" -msgstr "Sorodne stranske vrstice" +msgid "More…" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Field" @@ -297,14 +501,6 @@ msgstr "Polje" msgid ":" msgstr ":" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "Preveden pogled" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "Prevedi stransko vrstico" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "Izbriši" @@ -326,29 +522,13 @@ msgid "Last" msgstr "Konec" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "♻" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "Shrani & Uredi" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "Ustvari & Uredi" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" -msgstr "Novo" +msgid "Edit" +msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "Podvoji" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "Samo za branje/možno urejanje" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "<<" @@ -373,17 +553,81 @@ msgstr "Dodaj" msgid "Unhandled widget" msgstr "Neobravnavani gradnik" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "?" #: addons/web/static/src/xml/base.xml:0 -msgid "#" -msgstr "#" +msgid "(nolabel)" +msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" -msgstr "Končano" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "#" #: addons/web/static/src/xml/base.xml:0 msgid "Open..." @@ -417,18 +661,34 @@ msgstr "Shrani kot" msgid "Clear" msgstr "Počisti" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "Napredni filter" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "-- Filtr i--" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "-- Dejanja --" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "Shrani filter" @@ -445,6 +705,14 @@ msgstr "Ime filtra:" msgid "(Any existing filter with the same name will be replaced)" msgstr "(Vsak obstoječ filter z istim imenom bo zamenjan)" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "Vsak od teh pogojev se mora ujemati" @@ -465,10 +733,6 @@ msgstr "Dodaj pogoj" msgid "and" msgstr "in" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "Prekliči" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "Shrani & Novo" @@ -477,10 +741,6 @@ msgstr "Shrani & Novo" msgid "Save & Close" msgstr "Shrani & Zapri" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "Izvozi" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria to " @@ -561,10 +821,6 @@ msgstr "Novo geslo:" msgid "Confirm Password:" msgstr "Potrditev gesla:" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "Uvozi" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "1. Uvozi .CSV datoteko" diff --git a/addons/web/po/web.pot b/addons/web/po/web.pot index adfa15066fd..8ca40ae555e 100644 --- a/addons/web/po/web.pot +++ b/addons/web/po/web.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,43 +17,259 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" -#: addons/web/static/src/js/view_form.js:355 +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 msgid "Warning, the record has been modified, your changes will be discarded." msgstr "" -#: addons/web/static/src/js/view_form.js:1659 +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 msgid "   Search More..." msgstr "" -#: addons/web/static/src/js/view_form.js:1672 +#: addons/web/static/src/js/view_form.js:1893 #, python-format msgid "   Create \"%s\"" msgstr "" -#: addons/web/static/src/js/view_form.js:1678 +#: addons/web/static/src/js/view_form.js:1899 msgid "   Create and Edit..." msgstr "" -#: addons/web/static/src/js/views.js:568 +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 msgid "You must choose at least one record." msgstr "" -#: addons/web/static/src/js/views.js:569 +#: addons/web/static/src/js/views.js:703 msgid "Warning" msgstr "" -#: addons/web/static/src/js/views.js:609 +#: addons/web/static/src/js/views.js:737 msgid "Translations" msgstr "" -#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0 +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 msgid "Save" msgstr "" -#: addons/web/static/src/js/views.js:615 -msgid "Close" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "x" msgstr "" @@ -82,10 +298,6 @@ msgstr "" msgid "Loading..." msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Create" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Drop" msgstr "" @@ -269,15 +481,7 @@ msgid "View#" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Fields" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "View labels" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Sidebar Relates" +msgid "More…" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -288,14 +492,6 @@ msgstr "" msgid ":" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate view" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Translate sidebar" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Delete" msgstr "" @@ -317,29 +513,13 @@ msgid "Last" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "♻" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Save & Edit" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "Create & Edit" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "New" +msgid "Edit" msgstr "" #: addons/web/static/src/xml/base.xml:0 msgid "Duplicate" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Readonly/Editable" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "<<" msgstr "" @@ -364,16 +544,80 @@ msgstr "" msgid "Unhandled widget" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "?" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "#" +msgid "(nolabel)" msgstr "" #: addons/web/static/src/xml/base.xml:0 -msgid "Done" +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" msgstr "" #: addons/web/static/src/xml/base.xml:0 @@ -408,18 +652,34 @@ msgstr "" msgid "Clear" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Advanced Filter" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Filters --" -msgstr "" - -#: addons/web/static/src/xml/base.xml:0 -msgid "-- Actions --" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Save Filter" msgstr "" @@ -436,6 +696,14 @@ msgstr "" msgid "(Any existing filter with the same name will be replaced)" msgstr "" +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + #: addons/web/static/src/xml/base.xml:0 msgid "Any of the following conditions must match" msgstr "" @@ -456,10 +724,6 @@ msgstr "" msgid "and" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Cancel" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "Save & New" msgstr "" @@ -468,10 +732,6 @@ msgstr "" msgid "Save & Close" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Export" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "" "This wizard will export all data that matches the current search criteria" @@ -548,10 +808,6 @@ msgstr "" msgid "Confirm Password:" msgstr "" -#: addons/web/static/src/xml/base.xml:0 -msgid "Import" -msgstr "" - #: addons/web/static/src/xml/base.xml:0 msgid "1. Import a .CSV file" msgstr "" diff --git a/addons/web/po/zh_TW.po b/addons/web/po/zh_TW.po new file mode 100644 index 00000000000..90cff33eae7 --- /dev/null +++ b/addons/web/po/zh_TW.po @@ -0,0 +1,933 @@ +# Chinese (Traditional) translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-04 16:06+0000\n" +"Last-Translator: Walter Cheuk \n" +"Language-Team: Chinese (Traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web/static/src/js/data_import.js:73 +#: addons/web/static/src/js/view_form.js:2799 +#: addons/web/static/src/js/views.js:743 +msgid "Close" +msgstr "關閉" + +#: addons/web/static/src/js/data_import.js:74 +msgid "Import File" +msgstr "" + +#: addons/web/static/src/js/data_import.js:109 +msgid "External ID" +msgstr "" + +#: addons/web/static/src/js/search.js:231 +msgid "Filter Entry" +msgstr "" + +#: addons/web/static/src/js/search.js:233 +#: addons/web/static/src/js/search.js:274 addons/web/static/src/xml/base.xml:0 +msgid "Cancel" +msgstr "取消" + +#: addons/web/static/src/js/search.js:236 +#: addons/web/static/src/js/search.js:277 +msgid "OK" +msgstr "" + +#: addons/web/static/src/js/search.js:272 addons/web/static/src/xml/base.xml:0 +msgid "Add to Dashboard" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "Invalid Search" +msgstr "" + +#: addons/web/static/src/js/search.js:401 +msgid "triggered from search view" +msgstr "" + +#: addons/web/static/src/js/search.js:483 +#, python-format +msgid "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s" +msgstr "" + +#: addons/web/static/src/js/search.js:804 +msgid "not a valid integer" +msgstr "" + +#: addons/web/static/src/js/search.js:818 +msgid "not a valid number" +msgstr "" + +#: addons/web/static/src/js/search.js:1234 +msgid "contains" +msgstr "" + +#: addons/web/static/src/js/search.js:1235 +msgid "doesn't contain" +msgstr "" + +#: addons/web/static/src/js/search.js:1236 +#: addons/web/static/src/js/search.js:1251 +#: addons/web/static/src/js/search.js:1271 +#: addons/web/static/src/js/search.js:1291 +#: addons/web/static/src/js/search.js:1313 +msgid "is equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1237 +#: addons/web/static/src/js/search.js:1252 +#: addons/web/static/src/js/search.js:1272 +#: addons/web/static/src/js/search.js:1292 +#: addons/web/static/src/js/search.js:1314 +msgid "is not equal to" +msgstr "" + +#: addons/web/static/src/js/search.js:1238 +#: addons/web/static/src/js/search.js:1253 +#: addons/web/static/src/js/search.js:1273 +#: addons/web/static/src/js/search.js:1293 +#: addons/web/static/src/js/search.js:1315 +msgid "greater than" +msgstr "" + +#: addons/web/static/src/js/search.js:1239 +#: addons/web/static/src/js/search.js:1254 +#: addons/web/static/src/js/search.js:1274 +#: addons/web/static/src/js/search.js:1294 +#: addons/web/static/src/js/search.js:1316 +msgid "less than" +msgstr "" + +#: addons/web/static/src/js/search.js:1240 +#: addons/web/static/src/js/search.js:1255 +#: addons/web/static/src/js/search.js:1275 +#: addons/web/static/src/js/search.js:1295 +#: addons/web/static/src/js/search.js:1317 +msgid "greater or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1241 +#: addons/web/static/src/js/search.js:1256 +#: addons/web/static/src/js/search.js:1276 +#: addons/web/static/src/js/search.js:1296 +#: addons/web/static/src/js/search.js:1318 +msgid "less or equal than" +msgstr "" + +#: addons/web/static/src/js/search.js:1307 +#: addons/web/static/src/js/search.js:1332 +msgid "is" +msgstr "" + +#: addons/web/static/src/js/search.js:1333 +msgid "is not" +msgstr "" + +#: addons/web/static/src/js/search.js:1346 +msgid "is true" +msgstr "" + +#: addons/web/static/src/js/search.js:1347 +msgid "is false" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:182 +msgid "Do you really want to remove this view?" +msgstr "" + +#: addons/web/static/src/js/view_editor.js:454 +msgid "Do you really want to remove this node?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:433 +msgid "Do you really want to delete this record?" +msgstr "" + +#: addons/web/static/src/js/view_form.js:448 +msgid "" +"Warning, the record has been modified, your changes will be discarded." +msgstr "" + +#: addons/web/static/src/js/view_form.js:656 +msgid "Attachments" +msgstr "" + +#: addons/web/static/src/js/view_form.js:1880 +msgid "   Search More..." +msgstr "   搜尋更多..." + +#: addons/web/static/src/js/view_form.js:1893 +#, python-format +msgid "   Create \"%s\"" +msgstr "   建立「%s" + +#: addons/web/static/src/js/view_form.js:1899 +msgid "   Create and Edit..." +msgstr "   建立並編輯..." + +#: addons/web/static/src/js/view_list.js:14 +#: addons/web/static/src/xml/base.xml:0 +msgid "Create" +msgstr "建立" + +#: addons/web/static/src/js/view_list.js:263 +msgid "Unlimited" +msgstr "" + +#: addons/web/static/src/js/view_list.js:483 +msgid "Do you really want to remove these records?" +msgstr "" + +#: addons/web/static/src/js/view_list.js:1159 +msgid "Undefined" +msgstr "" + +#: addons/web/static/src/js/views.js:482 +msgid "Search: " +msgstr "" + +#: addons/web/static/src/js/views.js:581 +msgid "Customize" +msgstr "" + +#: addons/web/static/src/js/views.js:584 +msgid "Manage Views" +msgstr "" + +#: addons/web/static/src/js/views.js:586 addons/web/static/src/js/views.js:590 +#: addons/web/static/src/js/views.js:595 +msgid "Manage views of the current object" +msgstr "" + +#: addons/web/static/src/js/views.js:588 +msgid "Edit Workflow" +msgstr "" + +#: addons/web/static/src/js/views.js:593 +msgid "Customize Object" +msgstr "" + +#: addons/web/static/src/js/views.js:597 +msgid "Translate" +msgstr "" + +#: addons/web/static/src/js/views.js:599 +msgid "Technical translation" +msgstr "" + +#: addons/web/static/src/js/views.js:604 +msgid "Other Options" +msgstr "" + +#: addons/web/static/src/js/views.js:607 addons/web/static/src/xml/base.xml:0 +msgid "Import" +msgstr "匯入" + +#: addons/web/static/src/js/views.js:610 addons/web/static/src/xml/base.xml:0 +msgid "Export" +msgstr "匯出" + +#: addons/web/static/src/js/views.js:613 +msgid "View Log" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Reports" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Actions" +msgstr "" + +#: addons/web/static/src/js/views.js:622 +msgid "Links" +msgstr "" + +#: addons/web/static/src/js/views.js:702 +msgid "You must choose at least one record." +msgstr "要選擇至少一個紀錄。" + +#: addons/web/static/src/js/views.js:703 +msgid "Warning" +msgstr "警告" + +#: addons/web/static/src/js/views.js:737 +msgid "Translations" +msgstr "翻譯" + +#: addons/web/static/src/js/views.js:742 addons/web/static/src/xml/base.xml:0 +msgid "Save" +msgstr "儲存" + +#: addons/web/static/src/xml/base.xml:0 +msgid "x" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{title}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#{text}" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Powered by" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "openerp.com" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Loading..." +msgstr "載入..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Drop" +msgstr "捨棄" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Backup" +msgstr "備份" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Restore" +msgstr "還原" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password" +msgstr "密碼" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Back to Login" +msgstr "返回登入畫面" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CREATE DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master password:" +msgstr "主密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New database name:" +msgstr "新資料庫名稱:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Load Demonstration data:" +msgstr "載入演示資料:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Default language:" +msgstr "預設語言:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Admin password:" +msgstr "管理員密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm password:" +msgstr "確認密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "DROP DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database:" +msgstr "資料庫:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Master Password:" +msgstr "主密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "BACKUP DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "RESTORE DATABASE" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "File:" +msgstr "檔案:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CHANGE MASTER PASSWORD" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New master password:" +msgstr "新主密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm new master password:" +msgstr "確認新主密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User:" +msgstr "使用者:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Password:" +msgstr "密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Database" +msgstr "資料庫" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Login" +msgstr "登入" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Bad username or password" +msgstr "使用者名稱或密碼不對" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"We think that daily job activities can be more intuitive, efficient, " +"automated, .. and even fun." +msgstr "我們認為日常工作可以更直觀、更有效率、更自動化......以至更有趣。" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP's vision to be:" +msgstr "OpenERP 的願景為:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Full featured" +msgstr "完整功能" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Today's enterprise challenges are multiple. We provide one module for each " +"need." +msgstr "今時今日企業面對的問題很多。我們為每件工作皆提供處理的模組。" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open Source" +msgstr "開源碼" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"To Build a great product, we rely on the knowledge of thousands of " +"contributors." +msgstr "要製作好用的產品,我們靠的是成千上萬的自願貢獻者。" + +#: addons/web/static/src/xml/base.xml:0 +msgid "User Friendly" +msgstr "易用" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"In order to be productive, people need clean and easy to use interface." +msgstr "要工作更有效率,人們要更簡潔、更易用的介面。" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ")" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "LOGOUT" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "«" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "»" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_menu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "oe_secondary_submenu_item" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Hide this tip" +msgstr "隱藏此提示" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Disable all tips" +msgstr "停用所有提示" + +#: addons/web/static/src/xml/base.xml:0 +msgid "View#" +msgstr "檢視#" + +#: addons/web/static/src/xml/base.xml:0 +msgid "More…" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field" +msgstr "欄位" + +#: addons/web/static/src/xml/base.xml:0 +msgid ":" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delete" +msgstr "刪除" + +#: addons/web/static/src/xml/base.xml:0 +msgid "First" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Last" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Edit" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Duplicate" +msgstr "製作複本" + +#: addons/web/static/src/xml/base.xml:0 +msgid "<<" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "0" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "/" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid ">>" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add" +msgstr "添加" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Unhandled widget" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Notebook Page \"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "\"" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Modifiers:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "?" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(nolabel)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Field:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Object:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Widget:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Size:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Context:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Domain:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "On change:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Relation:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Selection:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "[" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "]" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "-" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "#" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Open..." +msgstr "開啟..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Create..." +msgstr "建立..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Search..." +msgstr "搜尋..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Uploading ..." +msgstr "上載 ..." + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select" +msgstr "選取" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save As" +msgstr "另存為" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Clear" +msgstr "清除" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(no string)" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Special:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Button Type:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Method:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Action ID:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Advanced Filter" +msgstr "進階篩選" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save Filter" +msgstr "儲存篩選" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Manage Filters" +msgstr "管理篩選" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Filter Name:" +msgstr "篩選名稱:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "(Any existing filter with the same name will be replaced)" +msgstr "(會取代所有同名篩選)" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Select Dashboard to add this filter to:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Title of new Dashboard item:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Any of the following conditions must match" +msgstr "以下任何條件都要符合" + +#: addons/web/static/src/xml/base.xml:0 +msgid "All the following conditions must match" +msgstr "以下所有條件都要符合" + +#: addons/web/static/src/xml/base.xml:0 +msgid "None of the following conditions must match" +msgstr "以下無一條件需要符合" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Add condition" +msgstr "添加條件" + +#: addons/web/static/src/xml/base.xml:0 +msgid "and" +msgstr "和" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & New" +msgstr "儲存並新增" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save & Close" +msgstr "儲存並關閉" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"This wizard will export all data that matches the current search criteria to " +"a CSV file.\n" +" You can export all data or only the fields that can be " +"reimported after modification." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Type:" +msgstr "匯出類型:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Compatible Export" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export all Data" +msgstr "匯出所有資料" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Export Formats" +msgstr "匯出格式" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Available fields" +msgstr "可提供欄位" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Fields to export" +msgstr "要匯出欄位" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save fields list" +msgstr "儲存欄位清單" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove" +msgstr "移除" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Remove All" +msgstr "全部移除" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Name" +msgstr "名稱" + +#: addons/web/static/src/xml/base.xml:0 +msgid " " +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Save as:" +msgstr "另存為:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Ok" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Saved exports:" +msgstr "已儲存匯出:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Old Password:" +msgstr "舊密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "New Password:" +msgstr "新密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Confirm Password:" +msgstr "確認密碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "1. Import a .CSV file" +msgstr "1. 匯入 .CSV 檔" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Select a .CSV file to import. If you need a sample of file to import,\n" +" you should use the export tool with the \"Import Compatible\" option." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "CSV File:" +msgstr "CSV 檔:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "2. Check your file format" +msgstr "2. 檢查檔案格式" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Import Options" +msgstr "匯入選項" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Does your file have titles?" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Separator:" +msgstr "分隔符號:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Delimiter:" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Encoding:" +msgstr "編碼:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "UTF-8" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Latin 1" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Lines to skip" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "The import failed due to:" +msgstr "匯入失敗,原因為:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Here is a preview of the file we could not import:" +msgstr "無法匯入檔案的預覽:" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP Web" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Version" +msgstr "版本" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP is a trademark of the" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP SA Company" +msgstr "OpenERP SA 公司" + +#: addons/web/static/src/xml/base.xml:0 +msgid "Licenced under the terms of" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "GNU Affero General Public License" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "About OpenERP" +msgstr "有關 OpenERP" + +#: addons/web/static/src/xml/base.xml:0 +msgid "OpenERP" +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"is a free enterprise-scale software system that is designed to boost\n" +" productivity and profit through data integration. It connects, " +"improves and\n" +" manages business processes in areas such as sales, finance, " +"supply chain,\n" +" project management, production, services, CRM, etc..." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"The system is platform-independent, and can be installed on Windows, Mac OS " +"X,\n" +" and various Linux and other Unix-based distributions. Its " +"architecture enables\n" +" new functionality to be rapidly created, modifications to be " +"made to a\n" +" production system and migration to a new version to be " +"straightforward." +msgstr "" + +#: addons/web/static/src/xml/base.xml:0 +msgid "" +"Depending on your needs, OpenERP is available through a web or application " +"client." +msgstr "" diff --git a/addons/web/static/lib/jquery.tipTip/jquery.tipTip.fme.patch b/addons/web/static/lib/jquery.tipTip/jquery.tipTip.fme.patch index 7af316b2f3f..1a62870a6b0 100644 --- a/addons/web/static/lib/jquery.tipTip/jquery.tipTip.fme.patch +++ b/addons/web/static/lib/jquery.tipTip/jquery.tipTip.fme.patch @@ -1,6 +1,16 @@ ---- jquery.tipTip_old.js 2011-11-14 21:40:55.000000000 +0100 -+++ jquery.tipTip.js 2011-11-15 10:09:35.000000000 +0100 -@@ -31,7 +31,7 @@ +--- jquery.tipTip_old.js 2011-12-01 14:15:35.000000000 +0100 ++++ jquery.tipTip.js 2011-12-07 12:32:32.000000000 +0100 +@@ -20,6 +20,9 @@ + */ + + (function($){ ++ $.tipTipClear = function() { ++ $("#tiptip_holder").remove(); ++ } + $.fn.tipTip = function(options) { + var defaults = { + activation: "hover", +@@ -31,7 +34,7 @@ fadeIn: 200, fadeOut: 200, attribute: "title", @@ -9,7 +19,7 @@ enter: function(){}, exit: function(){} }; -@@ -51,12 +51,7 @@ +@@ -51,12 +54,7 @@ return this.each(function(){ var org_elem = $(this); @@ -23,24 +33,20 @@ if(!opts.content){ org_elem.removeAttr(opts.attribute); //remove original Attribute } -@@ -99,6 +94,8 @@ +@@ -99,6 +97,8 @@ function active_tiptip(){ opts.enter.call(this); -+ var org_title = typeof opts.content === 'function' ? opts.content() : opts.content; ++ var org_title = typeof opts.content === 'function' ? opts.content.call(org_elem, opts) : opts.content; + org_title = org_title || org_elem.attr(opts.attribute); tiptip_content.html(org_title); tiptip_holder.hide().removeAttr("class").css("margin","0"); tiptip_arrow.removeAttr("style"); -@@ -176,8 +173,15 @@ - tiptip_arrow.css({"margin-left": arrow_left+"px", "margin-top": arrow_top+"px"}); +@@ -177,7 +177,12 @@ tiptip_holder.css({"margin-left": marg_left+"px", "margin-top": marg_top+"px"}).attr("class","tip"+t_class); -- if (timeout){ clearTimeout(timeout); } + if (timeout){ clearTimeout(timeout); } - timeout = setTimeout(function(){ tiptip_holder.stop(true,true).fadeIn(opts.fadeIn); }, opts.delay); -+ if (timeout) { -+ clearTimeout(timeout); -+ } + timeout = setTimeout(function() { + tiptip_holder.stop(true,true); + if ($.contains(document.documentElement, org_elem[0])) { diff --git a/addons/web/static/lib/jquery.tipTip/jquery.tipTip.js b/addons/web/static/lib/jquery.tipTip/jquery.tipTip.js index 0b3a24d4beb..522df828003 100644 --- a/addons/web/static/lib/jquery.tipTip/jquery.tipTip.js +++ b/addons/web/static/lib/jquery.tipTip/jquery.tipTip.js @@ -20,6 +20,9 @@ */ (function($){ + $.tipTipClear = function() { + $("#tiptip_holder").remove(); + } $.fn.tipTip = function(options) { var defaults = { activation: "hover", @@ -94,7 +97,7 @@ function active_tiptip(){ opts.enter.call(this); - var org_title = typeof opts.content === 'function' ? opts.content() : opts.content; + var org_title = typeof opts.content === 'function' ? opts.content.call(org_elem, opts) : opts.content; org_title = org_title || org_elem.attr(opts.attribute); tiptip_content.html(org_title); tiptip_holder.hide().removeAttr("class").css("margin","0"); diff --git a/addons/web/static/lib/jquery/jquery-1.6.2.js b/addons/web/static/lib/jquery/jquery-1.6.4.js similarity index 96% rename from addons/web/static/lib/jquery/jquery-1.6.2.js rename to addons/web/static/lib/jquery/jquery-1.6.4.js index f3201aacb6f..11e6d067962 100644 --- a/addons/web/static/lib/jquery/jquery-1.6.2.js +++ b/addons/web/static/lib/jquery/jquery-1.6.4.js @@ -1,5 +1,5 @@ /*! - * jQuery JavaScript Library v1.6.2 + * jQuery JavaScript Library v1.6.4 * http://jquery.com/ * * Copyright 2011, John Resig @@ -11,7 +11,7 @@ * Copyright 2011, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * - * Date: Thu Jun 30 14:16:56 2011 -0400 + * Date: Mon Sep 12 18:54:48 2011 -0400 */ (function( window, undefined ) { @@ -37,8 +37,8 @@ var jQuery = function( selector, context ) { rootjQuery, // A simple way to check for HTML strings or ID strings - // (both of which we optimize for) - quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + // Prioritize #id over to avoid XSS via location.hash (#9521) + quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, // Check if a string has a non-whitespace character in it rnotwhite = /\S/, @@ -66,11 +66,12 @@ var jQuery = function( selector, context ) { rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/, // Matches dashed string for camelizing - rdashAlpha = /-([a-z])/ig, + rdashAlpha = /-([a-z]|[0-9])/ig, + rmsPrefix = /^-ms-/, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { - return letter.toUpperCase(); + return ( letter + "" ).toUpperCase(); }, // Keep a UserAgent string for use with jQuery.browser @@ -212,7 +213,7 @@ jQuery.fn = jQuery.prototype = { selector: "", // The current version of jQuery being used - jquery: "1.6.2", + jquery: "1.6.4", // The default length of a jQuery object is 0 length: 0, @@ -521,10 +522,15 @@ jQuery.extend({ return false; } - // Not own constructor property must be Object - if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + try { + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call(obj, "constructor") && + !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + return false; + } + } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 return false; } @@ -574,24 +580,23 @@ jQuery.extend({ }, // Cross-browser xml parsing - // (xml & tmp used internally) - parseXML: function( data , xml , tmp ) { - - if ( window.DOMParser ) { // Standard - tmp = new DOMParser(); - xml = tmp.parseFromString( data , "text/xml" ); - } else { // IE - xml = new ActiveXObject( "Microsoft.XMLDOM" ); - xml.async = "false"; - xml.loadXML( data ); + parseXML: function( data ) { + var xml, tmp; + try { + if ( window.DOMParser ) { // Standard + tmp = new DOMParser(); + xml = tmp.parseFromString( data , "text/xml" ); + } else { // IE + xml = new ActiveXObject( "Microsoft.XMLDOM" ); + xml.async = "false"; + xml.loadXML( data ); + } + } catch( e ) { + xml = undefined; } - - tmp = xml.documentElement; - - if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) { + if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); } - return xml; }, @@ -611,10 +616,10 @@ jQuery.extend({ } }, - // Converts a dashed string to camelCased string; - // Used by both the css and data modules + // Convert dashed to camelCase; used by the css and data modules + // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { - return string.replace( rdashAlpha, fcamelCase ); + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { @@ -699,6 +704,9 @@ jQuery.extend({ }, inArray: function( elem, array ) { + if ( !array ) { + return -1; + } if ( indexOf ) { return indexOf.call( array, elem ); @@ -1071,7 +1079,7 @@ jQuery.extend({ if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise().then( newDefer.resolve, newDefer.reject ); } else { - newDefer[ action ]( returned ); + newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] ); } }); } else { @@ -1173,6 +1181,7 @@ jQuery.support = (function() { div.setAttribute("className", "t"); div.innerHTML = "
a"; + all = div.getElementsByTagName( "*" ); a = div.getElementsByTagName( "a" )[ 0 ]; @@ -1293,13 +1302,14 @@ jQuery.support = (function() { width: 0, height: 0, border: 0, - margin: 0 + margin: 0, + background: "none" }; if ( body ) { jQuery.extend( testElementStyle, { position: "absolute", - left: -1000, - top: -1000 + left: "-1000px", + top: "-1000px" }); } for ( i in testElementStyle ) { @@ -1404,7 +1414,7 @@ jQuery.boxModel = jQuery.support.boxModel; var rbrace = /^(?:\{.*\}|\[.*\])$/, - rmultiDash = /([a-z])([A-Z])/g; + rmultiDash = /([A-Z])/g; jQuery.extend({ cache: {}, @@ -1436,7 +1446,9 @@ jQuery.extend({ return; } - var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache, + var thisCache, ret, + internalKey = jQuery.expando, + getByName = typeof name === "string", // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary @@ -1452,7 +1464,7 @@ jQuery.extend({ // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all - if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) { + if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) { return; } @@ -1511,10 +1523,24 @@ jQuery.extend({ return thisCache[ internalKey ] && thisCache[ internalKey ].events; } - return getByName ? - // Check for both converted-to-camel and non-converted data property names - thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] : - thisCache; + // Check for both converted-to-camel and non-converted data property names + // If a data property was specified + if ( getByName ) { + + // First Try to find as-is property data + ret = thisCache[ name ]; + + // Test for null|undefined property data + if ( ret == null ) { + + // Try to find the camelCased property + ret = thisCache[ jQuery.camelCase( name ) ]; + } + } else { + ret = thisCache; + } + + return ret; }, removeData: function( elem, name, pvt /* Internal Use Only */ ) { @@ -1522,7 +1548,12 @@ jQuery.extend({ return; } - var internalKey = jQuery.expando, isNode = elem.nodeType, + var thisCache, + + // Reference to internal data cache key + internalKey = jQuery.expando, + + isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, @@ -1537,9 +1568,16 @@ jQuery.extend({ } if ( name ) { - var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; + + thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ]; if ( thisCache ) { + + // Support interoperable removal of hyphenated or camelcased keys + if ( !thisCache[ name ] ) { + name = jQuery.camelCase( name ); + } + delete thisCache[ name ]; // If there is no data left in the cache, we want to continue @@ -1566,7 +1604,8 @@ jQuery.extend({ // Browsers that fail expando deletion also refuse to delete expandos on // the window, but it will allow it on all other JS objects; other browsers // don't care - if ( jQuery.support.deleteExpando || cache != window ) { + // Ensure that `cache` is not a window object #10080 + if ( jQuery.support.deleteExpando || !cache.setInterval ) { delete cache[ id ]; } else { cache[ id ] = null; @@ -1690,7 +1729,8 @@ function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { - var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase(); + + var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); @@ -1910,8 +1950,7 @@ var rclass = /[\n\t\r]/g, rfocusable = /^(?:button|input|object|select|textarea)$/i, rclickable = /^a(?:rea)?$/i, rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, - rinvalidChar = /\:|^on/, - formHook, boolHook; + nodeHook, boolHook; jQuery.fn.extend({ attr: function( name, value ) { @@ -2049,7 +2088,7 @@ jQuery.fn.extend({ hasClass: function( selector ) { var className = " " + selector + " "; for ( var i = 0, l = this.length; i < l; i++ ) { - if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { + if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) { return true; } } @@ -2229,14 +2268,11 @@ jQuery.extend({ if ( !hooks ) { // Use boolHook for boolean attributes if ( rboolean.test( name ) ) { - hooks = boolHook; - // Use formHook for forms and if the name contains certain characters - } else if ( formHook && name !== "className" && - (jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) { - - hooks = formHook; + // Use nodeHook if available( IE6/7 ) + } else if ( nodeHook ) { + hooks = nodeHook; } } } @@ -2273,14 +2309,9 @@ jQuery.extend({ var propName; if ( elem.nodeType === 1 ) { name = jQuery.attrFix[ name ] || name; - - if ( jQuery.support.getSetAttribute ) { - // Use removeAttribute in browsers that support it - elem.removeAttribute( name ); - } else { - jQuery.attr( elem, name, "" ); - elem.removeAttributeNode( elem.getAttributeNode( name ) ); - } + + jQuery.attr( elem, name, "" ); + elem.removeAttribute( name ); // Set corresponding property to false for boolean attributes if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) { @@ -2308,33 +2339,20 @@ jQuery.extend({ } } }, - tabIndex: { - get: function( elem ) { - // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set - // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - var attributeNode = elem.getAttributeNode("tabIndex"); - - return attributeNode && attributeNode.specified ? - parseInt( attributeNode.value, 10 ) : - rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? - 0 : - undefined; - } - }, // Use the value property for back compat - // Use the formHook for button elements in IE6/7 (#1954) + // Use the nodeHook for button elements in IE6/7 (#1954) value: { get: function( elem, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.get( elem, name ); + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.get( elem, name ); } return name in elem ? elem.value : null; }, set: function( elem, value, name ) { - if ( formHook && jQuery.nodeName( elem, "button" ) ) { - return formHook.set( elem, value, name ); + if ( nodeHook && jQuery.nodeName( elem, "button" ) ) { + return nodeHook.set( elem, value, name ); } // Does not return so that setAttribute is also used elem.value = value; @@ -2383,7 +2401,7 @@ jQuery.extend({ } } else { - if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) { + if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { @@ -2392,14 +2410,33 @@ jQuery.extend({ } }, - propHooks: {} + propHooks: { + tabIndex: { + get: function( elem ) { + // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set + // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + var attributeNode = elem.getAttributeNode("tabindex"); + + return attributeNode && attributeNode.specified ? + parseInt( attributeNode.value, 10 ) : + rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? + 0 : + undefined; + } + } + } }); +// Add the tabindex propHook to attrHooks for back-compat +jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex; + // Hook for boolean attributes boolHook = { get: function( elem, name ) { // Align boolean attributes with corresponding properties - return jQuery.prop( elem, name ) ? + // Fall back to attribute presence where some booleans are not supported + var attrNode; + return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ? name.toLowerCase() : undefined; }, @@ -2425,12 +2462,10 @@ boolHook = { // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !jQuery.support.getSetAttribute ) { - - // propFix is more comprehensive and contains all fixes - jQuery.attrFix = jQuery.propFix; - // Use this for any attribute on a form in IE6/7 - formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = { + // Use this for any attribute in IE6/7 + // This fixes almost every IE6/7 issue + nodeHook = jQuery.valHooks.button = { get: function( elem, name ) { var ret; ret = elem.getAttributeNode( name ); @@ -2440,13 +2475,13 @@ if ( !jQuery.support.getSetAttribute ) { undefined; }, set: function( elem, value, name ) { - // Check form objects in IE (multiple bugs related) - // Only use nodeValue if the attribute node exists on the form + // Set the existing or create a new attribute node var ret = elem.getAttributeNode( name ); - if ( ret ) { - ret.nodeValue = value; - return value; + if ( !ret ) { + ret = document.createAttribute( name ); + elem.setAttributeNode( ret ); } + return (ret.nodeValue = value + ""); } }; @@ -2505,6 +2540,7 @@ if ( !jQuery.support.optSelected ) { parent.parentNode.selectedIndex; } } + return null; } }); } @@ -3235,8 +3271,9 @@ if ( !jQuery.support.submitBubbles ) { setup: function( data, namespaces ) { if ( !jQuery.nodeName( this, "form" ) ) { jQuery.event.add(this, "click.specialSubmit", function( e ) { + // Avoid triggering error on non-existent type attribute in IE VML (#7071) var elem = e.target, - type = elem.type; + type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : ""; if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) { trigger( "submit", this, arguments ); @@ -3245,7 +3282,7 @@ if ( !jQuery.support.submitBubbles ) { jQuery.event.add(this, "keypress.specialSubmit", function( e ) { var elem = e.target, - type = elem.type; + type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : ""; if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) { trigger( "submit", this, arguments ); @@ -3270,7 +3307,8 @@ if ( !jQuery.support.changeBubbles ) { var changeFilters, getVal = function( elem ) { - var type = elem.type, val = elem.value; + var type = jQuery.nodeName( elem, "input" ) ? elem.type : "", + val = elem.value; if ( type === "radio" || type === "checkbox" ) { val = elem.checked; @@ -5295,12 +5333,17 @@ jQuery.fn.extend({ // Determine the position of an element within // the matched set of elements index: function( elem ) { - if ( !elem || typeof elem === "string" ) { - return jQuery.inArray( this[0], - // If it receives a string, the selector is used - // If it receives nothing, the siblings are used - elem ? jQuery( elem ) : this.parent().children() ); + + // No argument, return index in parent + if ( !elem ) { + return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1; } + + // index in selector + if ( typeof elem === "string" ) { + return jQuery.inArray( this[0], jQuery( elem ) ); + } + // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used @@ -6048,7 +6091,10 @@ jQuery.extend({ // with an element if you are cloning the body and one of the // elements on the page has a name or id of "length" for ( i = 0; srcElements[i]; ++i ) { - cloneFixAttributes( srcElements[i], destElements[i] ); + // Ensure that the destination node is not null; Fixes #9587 + if ( destElements[i] ) { + cloneFixAttributes( srcElements[i], destElements[i] ); + } } } @@ -6248,14 +6294,14 @@ function evalScript( i, elem ) { + var ralpha = /alpha\([^)]*\)/i, ropacity = /opacity=([^)]*)/, // fixed for IE9, see #8346 rupper = /([A-Z]|^ms)/g, rnumpx = /^-?\d+(?:px)?$/i, rnum = /^-?\d/, - rrelNum = /^[+\-]=/, - rrelNumFilter = /[^+\-\.\de]+/g, + rrelNum = /^([\-+])=([\-+.\de]+)/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssWidth = [ "Left", "Right" ], @@ -6332,18 +6378,18 @@ jQuery.extend({ if ( value !== undefined ) { type = typeof value; - // Make sure that NaN and null values aren't set. See: #7116 - if ( type === "number" && isNaN( value ) || value == null ) { - return; - } - // convert relative number strings (+= or -=) to relative numbers. #7345 - if ( type === "string" && rrelNum.test( value ) ) { - value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) ); + if ( type === "string" && (ret = rrelNum.exec( value )) ) { + value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) ); // Fixes bug #9237 type = "number"; } + // Make sure that NaN and null values aren't set. See: #7116 + if ( value == null || type === "number" && isNaN( value ) ) { + return; + } + // If a number was passed in, add 'px' to the (except for certain CSS properties) if ( type === "number" && !jQuery.cssNumber[ origName ] ) { value += "px"; @@ -6459,18 +6505,29 @@ if ( !jQuery.support.opacity ) { set: function( elem, value ) { var style = elem.style, - currentStyle = elem.currentStyle; + currentStyle = elem.currentStyle, + opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")", + filter = currentStyle && currentStyle.filter || style.filter || ""; // IE has trouble with opacity if it does not have layout // Force it by setting the zoom level style.zoom = 1; - // Set the alpha filter to set the opacity - var opacity = jQuery.isNaN( value ) ? - "" : - "alpha(opacity=" + value * 100 + ")", - filter = currentStyle && currentStyle.filter || style.filter || ""; + // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652 + if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) { + // Setting style.filter to null, "" & " " still leave "filter:" in the cssText + // if "filter:" is present at all, clearType is disabled, we want to avoid this + // style.removeAttribute is IE Only, but so apparently is this code path... + style.removeAttribute( "filter" ); + + // if there there is no filter style applied in a css rule, we are done + if ( currentStyle && !currentStyle.filter ) { + return; + } + } + + // otherwise, set new filter values style.filter = ralpha.test( filter ) ? filter.replace( ralpha, opacity ) : filter + " " + opacity; @@ -6625,9 +6682,9 @@ var r20 = /%20/g, rCRLF = /\r?\n/g, rhash = /#.*$/, rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL - rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/, + rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, rquery = /\?/, @@ -6662,7 +6719,10 @@ var r20 = /%20/g, ajaxLocation, // Document location segments - ajaxLocParts; + ajaxLocParts, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = ["*/"] + ["*"]; // #8138, IE may throw an exception when accessing // a field from window.location if document.domain has been set @@ -6755,6 +6815,22 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX return selection; } +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + for( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } +} + jQuery.fn.extend({ load: function( url, params, callback ) { if ( typeof url !== "string" && _load ) { @@ -6898,23 +6974,16 @@ jQuery.extend({ // Creates a full fledged settings object into target // with both ajaxSettings and settings fields. // If target is omitted, writes into ajaxSettings. - ajaxSetup: function ( target, settings ) { - if ( !settings ) { - // Only one parameter, we extend ajaxSettings - settings = target; - target = jQuery.extend( true, jQuery.ajaxSettings, settings ); + ajaxSetup: function( target, settings ) { + if ( settings ) { + // Building a settings object + ajaxExtend( target, jQuery.ajaxSettings ); } else { - // target was provided, we extend into it - jQuery.extend( true, target, jQuery.ajaxSettings, settings ); - } - // Flatten fields we don't want deep extended - for( var field in { context: 1, url: 1 } ) { - if ( field in settings ) { - target[ field ] = settings[ field ]; - } else if( field in jQuery.ajaxSettings ) { - target[ field ] = jQuery.ajaxSettings[ field ]; - } + // Extending ajaxSettings + settings = target; + target = jQuery.ajaxSettings; } + ajaxExtend( target, settings ); return target; }, @@ -6942,7 +7011,7 @@ jQuery.extend({ html: "text/html", text: "text/plain", json: "application/json, text/javascript", - "*": "*/*" + "*": allTypes }, contents: { @@ -6972,6 +7041,15 @@ jQuery.extend({ // Parse text as xml "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + context: true, + url: true } }, @@ -7082,7 +7160,7 @@ jQuery.extend({ // Callback for when everything is done // It is defined here because jslint complains if it is declared // at the end of the function (which would be more logical and readable) - function done( status, statusText, responses, headers ) { + function done( status, nativeStatusText, responses, headers ) { // Called once if ( state === 2 ) { @@ -7105,11 +7183,12 @@ jQuery.extend({ responseHeadersString = headers || ""; // Set readyState - jqXHR.readyState = status ? 4 : 0; + jqXHR.readyState = status > 0 ? 4 : 0; var isSuccess, success, error, + statusText = nativeStatusText, response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined, lastModified, etag; @@ -7161,7 +7240,7 @@ jQuery.extend({ // Set data for the fake xhr object jqXHR.status = status; - jqXHR.statusText = statusText; + jqXHR.statusText = "" + ( nativeStatusText || statusText ); // Success/Error if ( isSuccess ) { @@ -7183,7 +7262,7 @@ jQuery.extend({ completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] ); if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] ); + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); // Handle the global AJAX counter if ( !( --jQuery.active ) ) { jQuery.event.trigger( "ajaxStop" ); @@ -7264,6 +7343,8 @@ jQuery.extend({ // If data is available, append data to url if ( s.data ) { s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data; + // #9682: remove data so that it's not used in an eventual retry + delete s.data; } // Get ifModifiedKey before adding the anti-cache parameter @@ -7301,7 +7382,7 @@ jQuery.extend({ jqXHR.setRequestHeader( "Accept", s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) : + s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s.accepts[ "*" ] ); @@ -7347,7 +7428,7 @@ jQuery.extend({ transport.send( requestHeaders, done ); } catch (e) { // Propagate exception as error if not done - if ( status < 2 ) { + if ( state < 2 ) { done( -1, e ); // Simply rethrow otherwise } else { @@ -7995,10 +8076,7 @@ var elemdisplay = {}, // opacity animations [ "opacity" ] ], - fxNow, - requestAnimationFrame = window.webkitRequestAnimationFrame || - window.mozRequestAnimationFrame || - window.oRequestAnimationFrame; + fxNow; jQuery.fn.extend({ show: function( speed, easing, callback ) { @@ -8374,8 +8452,7 @@ jQuery.fx.prototype = { // Start an animation from one number to another custom: function( from, to, unit ) { var self = this, - fx = jQuery.fx, - raf; + fx = jQuery.fx; this.startTime = fxNow || createFxNow(); this.start = from; @@ -8391,20 +8468,7 @@ jQuery.fx.prototype = { t.elem = this.elem; if ( t() && jQuery.timers.push(t) && !timerId ) { - // Use requestAnimationFrame instead of setInterval if available - if ( requestAnimationFrame ) { - timerId = true; - raf = function() { - // When timerId gets set to null at any point, this stops - if ( timerId ) { - requestAnimationFrame( raf ); - fx.tick(); - } - }; - requestAnimationFrame( raf ); - } else { - timerId = setInterval( fx.tick, fx.interval ); - } + timerId = setInterval( fx.tick, fx.interval ); } }, @@ -8947,9 +9011,10 @@ jQuery.each([ "Height", "Width" ], function( i, name ) { if ( jQuery.isWindow( elem ) ) { // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat - var docElemProp = elem.document.documentElement[ "client" + name ]; + var docElemProp = elem.document.documentElement[ "client" + name ], + body = elem.document.body; return elem.document.compatMode === "CSS1Compat" && docElemProp || - elem.document.body[ "client" + name ] || docElemProp; + body && body[ "client" + name ] || docElemProp; // Get document width or height } else if ( elem.nodeType === 9 ) { diff --git a/addons/web/static/lib/py.parse/lib/py.js b/addons/web/static/lib/py.parse/lib/py.js index 0f2415f1252..19f95a870bb 100644 --- a/addons/web/static/lib/py.parse/lib/py.js +++ b/addons/web/static/lib/py.parse/lib/py.js @@ -334,7 +334,7 @@ var py = {}; }, number: function (str, index) { var character = str[index]; - if (!NUMBER.test(character)) { + if (!(character == '.' || NUMBER.test(character))) { this.tokens.push(create(symbols['(number)'], { value: parseFloat(this.builder(true).join('')) })); diff --git a/addons/web/static/lib/qunit/qunit-2011-23-22.css b/addons/web/static/lib/qunit/qunit-2011-23-22.css deleted file mode 100644 index cc791a9b099..00000000000 --- a/addons/web/static/lib/qunit/qunit-2011-23-22.css +++ /dev/null @@ -1,248 +0,0 @@ -/** Font Family and Sizes */ - -#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { - font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial; -} - -#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { - font-size: small; -} - -#qunit-tests { - font-size: smaller; -} - -/** Resets */ - -#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult { - margin: 0; - padding: 0; -} - -/** Header */ - -#qunit-header { - padding: 0.5em 0 0.5em 1em; - - color: #8699a4; - background-color: #0d3349; - - font-size: 1.5em; - line-height: 1em; - font-weight: normal; - - border-radius: 15px 15px 0 0; - -moz-border-radius: 15px 15px 0 0; - -webkit-border-top-right-radius: 15px; - -webkit-border-top-left-radius: 15px; -} - -#qunit-header a { - text-decoration: none; - color: #c2ccd1; -} - -#qunit-header a:hover, -#qunit-header a:focus { - color: #fff; -} - -#qunit-banner { - height: 5px; -} - -#qunit-testrunner-toolbar { - padding: 0.5em 0 0.5em 2em; - color: #5E740B; - background-color: #eee; -} - -#qunit-userAgent { - padding: 0.5em 0 0.5em 2.5em; - background-color: #2b81af; - color: #fff; - text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; -} - -/** Tests: Pass/Fail */ - -#qunit-tests { - list-style-position: inside; -} - -#qunit-tests li { - padding: 0.4em 0.5em 0.4em 2.5em; - border-bottom: 1px solid #fff; - list-style-position: inside; -} - -#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { - display: none; -} - -#qunit-tests li strong { - cursor: pointer; -} - -#qunit-tests li a { - padding: 0.5em; - color: #c2ccd1; - text-decoration: none; -} - -#qunit-tests li a:hover, -#qunit-tests li a:focus { - color: #000; -} - -#qunit-tests ol { - margin-top: 0.5em; - padding: 0.5em; - - background-color: #fff; - - border-radius: 15px; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - - box-shadow: inset 0px 2px 13px #999; - -moz-box-shadow: inset 0px 2px 13px #999; - -webkit-box-shadow: inset 0px 2px 13px #999; -} - -#qunit-tests table { - border-collapse: collapse; - margin-top: .2em; -} - -#qunit-tests th { - text-align: right; - vertical-align: top; - padding: 0 .5em 0 0; -} - -#qunit-tests td { - vertical-align: top; -} - -#qunit-tests pre { - margin: 0; - white-space: pre-wrap; - word-wrap: break-word; -} - -#qunit-tests del { - background-color: #e0f2be; - color: #374e0c; - text-decoration: none; -} - -#qunit-tests ins { - background-color: #ffcaca; - color: #500; - text-decoration: none; -} - -/*** Test Counts */ - -#qunit-tests b.counts { - color: black; -} - -#qunit-tests b.passed { - color: #5E740B; -} - -#qunit-tests b.failed { - color: #710909; -} - -#qunit-tests li li { - margin: 0.5em; - padding: 0.4em 0.5em 0.4em 0.5em; - background-color: #fff; - border-bottom: none; - list-style-position: inside; -} - -/*** Passing Styles */ - -#qunit-tests li li.pass { - color: #5E740B; - background-color: #fff; - border-left: 26px solid #C6E746; -} - -#qunit-tests .pass { - color: #528CE0; - background-color: #D2E0E6; -} - -#qunit-tests .pass .test-name { - color: #366097; -} - -#qunit-tests .pass .test-actual, -#qunit-tests .pass .test-expected { - color: #999999; -} - -#qunit-banner.qunit-pass { - background-color: #C6E746; -} - -/*** Failing Styles */ - -#qunit-tests li li.fail { - color: #710909; - background-color: #fff; - border-left: 26px solid #EE5757; -} - -#qunit-tests > li:last-child { - border-radius: 0 0 15px 15px; - -moz-border-radius: 0 0 15px 15px; - -webkit-border-bottom-right-radius: 15px; - -webkit-border-bottom-left-radius: 15px; -} - -#qunit-tests .fail { - color: #000000; - background-color: #EE5757; -} - -#qunit-tests .fail .test-name, -#qunit-tests .fail .module-name { - color: #000000; -} - -#qunit-tests .fail .test-actual { - color: #EE5757; -} - -#qunit-tests .fail .test-expected { - color: green; -} - -#qunit-banner.qunit-fail { - background-color: #EE5757; -} - -/** Result */ - -#qunit-testresult { - padding: 0.5em 0.5em 0.5em 2.5em; - - color: #2b81af; - background-color: #D2E0E6; - - border-bottom: 1px solid white; -} - -/** Fixture */ - -#qunit-fixture { - position: absolute; - top: -10000px; - left: -10000px; -} diff --git a/addons/web/static/lib/qunit/qunit-2011-23-22.js b/addons/web/static/lib/qunit/qunit-2011-23-22.js deleted file mode 100644 index 18f8ae1715c..00000000000 --- a/addons/web/static/lib/qunit/qunit-2011-23-22.js +++ /dev/null @@ -1,1456 +0,0 @@ -/* - * QUnit - A JavaScript Unit Testing Framework - * - * http://docs.jquery.com/QUnit - * - * Copyright (c) 2011 John Resig, Jörn Zaefferer - * Dual licensed under the MIT (MIT-LICENSE.txt) - * or GPL (GPL-LICENSE.txt) licenses. - */ - -(function(window) { - - var defined = { - setTimeout: typeof window.setTimeout !== "undefined", - sessionStorage: (function() { - try { - return !!sessionStorage.getItem; - } catch(e) { - return false; - } - })() - }; - - var testId = 0; - - var Test = function(name, testName, expected, testEnvironmentArg, async, callback) { - this.name = name; - this.testName = testName; - this.expected = expected; - this.testEnvironmentArg = testEnvironmentArg; - this.async = async; - this.callback = callback; - this.assertions = []; - }; - Test.prototype = { - init: function() { - var tests = id("qunit-tests"); - if (tests) { - var b = document.createElement("strong"); - b.innerHTML = "Running " + this.name; - var li = document.createElement("li"); - li.appendChild(b); - li.className = "running"; - li.id = this.id = "test-output" + testId++; - tests.appendChild(li); - } - }, - setup: function() { - if (this.module != config.previousModule) { - if (config.previousModule) { - QUnit.moduleDone({ - name: config.previousModule, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all - }); - } - config.previousModule = this.module; - config.moduleStats = { all: 0, bad: 0 }; - QUnit.moduleStart({ - name: this.module - }); - } - - config.current = this; - this.testEnvironment = extend({ - setup: function() { - }, - teardown: function() { - } - }, this.moduleTestEnvironment); - if (this.testEnvironmentArg) { - extend(this.testEnvironment, this.testEnvironmentArg); - } - - QUnit.testStart({ - name: this.testName - }); - - // allow utility functions to access the current test environment - // TODO why?? - QUnit.current_testEnvironment = this.testEnvironment; - - try { - if (!config.pollution) { - saveGlobal(); - } - - this.testEnvironment.setup.call(this.testEnvironment); - } catch(e) { - QUnit.ok(false, "Setup failed on " + this.testName + ": " + e.message); - } - }, - run: function() { - if (this.async) { - QUnit.stop(); - } - - if (config.notrycatch) { - this.callback.call(this.testEnvironment); - return; - } - try { - this.callback.call(this.testEnvironment); - } catch(e) { - fail("Test " + this.testName + " died, exception and test follows", e, this.callback); - QUnit.ok(false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e)); - // else next test will carry the responsibility - saveGlobal(); - - // Restart the tests if they're blocking - if (config.blocking) { - start(); - } - } - }, - teardown: function() { - try { - checkPollution(); - this.testEnvironment.teardown.call(this.testEnvironment); - } catch(e) { - QUnit.ok(false, "Teardown failed on " + this.testName + ": " + e.message); - } - }, - finish: function() { - if (this.expected && this.expected != this.assertions.length) { - QUnit.ok(false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run"); - } - - var good = 0, bad = 0, - tests = id("qunit-tests"); - - config.stats.all += this.assertions.length; - config.moduleStats.all += this.assertions.length; - - if (tests) { - var ol = document.createElement("ol"); - - for (var i = 0; i < this.assertions.length; i++) { - var assertion = this.assertions[i]; - - var li = document.createElement("li"); - li.className = assertion.result ? "pass" : "fail"; - li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed"); - ol.appendChild(li); - - if (assertion.result) { - good++; - } else { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - - // store result when possible - if (QUnit.config.reorder && defined.sessionStorage) { - if (bad) { - sessionStorage.setItem("qunit-" + this.module + "-" + this.testName, bad) - } else { - sessionStorage.removeItem("qunit-" + this.testName); - } - } - - if (bad == 0) { - ol.style.display = "none"; - } - - var b = document.createElement("strong"); - b.innerHTML = this.name + " (" + bad + ", " + good + ", " + this.assertions.length + ")"; - - var a = document.createElement("a"); - a.innerHTML = "Rerun"; - a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); - - addEvent(b, "click", function() { - var next = b.nextSibling.nextSibling, - display = next.style.display; - next.style.display = display === "none" ? "block" : "none"; - }); - - addEvent(b, "dblclick", function(e) { - var target = e && e.target ? e.target : window.event.srcElement; - if (target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b") { - target = target.parentNode; - } - if (window.location && target.nodeName.toLowerCase() === "strong") { - window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); - } - }); - - var li = id(this.id); - li.className = bad ? "fail" : "pass"; - li.removeChild(li.firstChild); - li.appendChild(b); - li.appendChild(a); - li.appendChild(ol); - - } else { - for (var i = 0; i < this.assertions.length; i++) { - if (!this.assertions[i].result) { - bad++; - config.stats.bad++; - config.moduleStats.bad++; - } - } - } - - try { - QUnit.reset(); - } catch(e) { - fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset); - } - - QUnit.testDone({ - name: this.testName, - failed: bad, - passed: this.assertions.length - bad, - total: this.assertions.length - }); - }, - - queue: function() { - var test = this; - synchronize(function() { - test.init(); - }); - function run() { - // each of these can by async - synchronize(function() { - test.setup(); - }); - synchronize(function() { - test.run(); - }); - synchronize(function() { - test.teardown(); - }); - synchronize(function() { - test.finish(); - }); - } - - // defer when previous test run passed, if storage is available - var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName); - if (bad) { - run(); - } else { - synchronize(run); - } - ; - } - - }; - - var QUnit = { - - // call on start of module test to prepend name to all tests - module: function(name, testEnvironment) { - config.currentModule = name; - config.currentModuleTestEnviroment = testEnvironment; - }, - - asyncTest: function(testName, expected, callback) { - if (arguments.length === 2) { - callback = expected; - expected = 0; - } - - QUnit.test(testName, expected, callback, true); - }, - - test: function(testName, expected, callback, async) { - var name = '' + testName + '', testEnvironmentArg; - - if (arguments.length === 2) { - callback = expected; - expected = null; - } - // is 2nd argument a testEnvironment? - if (expected && typeof expected === 'object') { - testEnvironmentArg = expected; - expected = null; - } - - if (config.currentModule) { - name = '' + config.currentModule + ": " + name; - } - - if (!validTest(config.currentModule + ": " + testName)) { - return; - } - - var test = new Test(name, testName, expected, testEnvironmentArg, async, callback); - test.module = config.currentModule; - test.moduleTestEnvironment = config.currentModuleTestEnviroment; - test.queue(); - }, - - /** - * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. - */ - expect: function(asserts) { - config.current.expected = asserts; - }, - - /** - * Asserts true. - * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); - */ - ok: function(a, msg) { - a = !!a; - var details = { - result: a, - message: msg - }; - msg = escapeHtml(msg); - QUnit.log(details); - config.current.assertions.push({ - result: a, - message: msg - }); - }, - - /** - * Checks that the first two arguments are equal, with an optional message. - * Prints out both actual and expected values. - * - * Prefered to ok( actual == expected, message ) - * - * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); - * - * @param Object actual - * @param Object expected - * @param String message (optional) - */ - equal: function(actual, expected, message) { - QUnit.push(expected == actual, actual, expected, message); - }, - - notEqual: function(actual, expected, message) { - QUnit.push(expected != actual, actual, expected, message); - }, - - deepEqual: function(actual, expected, message) { - QUnit.push(QUnit.equiv(actual, expected), actual, expected, message); - }, - - notDeepEqual: function(actual, expected, message) { - QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message); - }, - - strictEqual: function(actual, expected, message) { - QUnit.push(expected === actual, actual, expected, message); - }, - - notStrictEqual: function(actual, expected, message) { - QUnit.push(expected !== actual, actual, expected, message); - }, - - raises: function(block, expected, message) { - var actual, ok = false; - - if (typeof expected === 'string') { - message = expected; - expected = null; - } - - try { - block(); - } catch (e) { - actual = e; - } - - if (actual) { - // we don't want to validate thrown error - if (!expected) { - ok = true; - // expected is a regexp - } else if (QUnit.objectType(expected) === "regexp") { - ok = expected.test(actual); - // expected is a constructor - } else if (actual instanceof expected) { - ok = true; - // expected is a validation function which returns true is validation passed - } else if (expected.call({}, actual) === true) { - ok = true; - } - } - - QUnit.ok(ok, message); - }, - - start: function() { - config.semaphore--; - if (config.semaphore > 0) { - // don't start until equal number of stop-calls - return; - } - if (config.semaphore < 0) { - // ignore if start is called more often then stop - config.semaphore = 0; - } - // A slight delay, to avoid any current callbacks - if (defined.setTimeout) { - window.setTimeout(function() { - if (config.timeout) { - clearTimeout(config.timeout); - } - - config.blocking = false; - process(); - }, 13); - } else { - config.blocking = false; - process(); - } - }, - - stop: function(timeout) { - config.semaphore++; - config.blocking = true; - - if (timeout && defined.setTimeout) { - clearTimeout(config.timeout); - config.timeout = window.setTimeout(function() { - QUnit.ok(false, "Test timed out"); - QUnit.start(); - }, timeout); - } - } - }; - -// Backwards compatibility, deprecated - QUnit.equals = QUnit.equal; - QUnit.same = QUnit.deepEqual; - -// Maintain internal state - var config = { - // The queue of tests to run - queue: [], - - // block until document ready - blocking: true, - - // by default, run previously failed tests first - // very useful in combination with "Hide passed tests" checked - reorder: true, - - noglobals: false, - notrycatch: false - }; - -// Load paramaters - (function() { - var location = window.location || { search: "", protocol: "file:" }, - params = location.search.slice(1).split("&"), - length = params.length, - urlParams = {}, - current; - - if (params[ 0 ]) { - for (var i = 0; i < length; i++) { - current = params[ i ].split("="); - current[ 0 ] = decodeURIComponent(current[ 0 ]); - // allow just a key to turn on a flag, e.g., test.html?noglobals - current[ 1 ] = current[ 1 ] ? decodeURIComponent(current[ 1 ]) : true; - urlParams[ current[ 0 ] ] = current[ 1 ]; - if (current[ 0 ] in config) { - config[ current[ 0 ] ] = current[ 1 ]; - } - } - } - - QUnit.urlParams = urlParams; - config.filter = urlParams.filter; - - // Figure out if we're running the tests from a server or not - QUnit.isLocal = !!(location.protocol === 'file:'); - })(); - -// Expose the API as global variables, unless an 'exports' -// object exists, in that case we assume we're in CommonJS - if (typeof exports === "undefined" || typeof require === "undefined") { - extend(window, QUnit); - window.QUnit = QUnit; - } else { - extend(exports, QUnit); - exports.QUnit = QUnit; - } - -// define these after exposing globals to keep them in these QUnit namespace only - extend(QUnit, { - config: config, - - // Initialize the configuration options - init: function() { - extend(config, { - stats: { all: 0, bad: 0 }, - moduleStats: { all: 0, bad: 0 }, - started: +new Date, - updateRate: 1000, - blocking: false, - autostart: true, - autorun: false, - filter: "", - queue: [], - semaphore: 0 - }); - - var tests = id("qunit-tests"), - banner = id("qunit-banner"), - result = id("qunit-testresult"); - - if (tests) { - tests.innerHTML = ""; - } - - if (banner) { - banner.className = ""; - } - - if (result) { - result.parentNode.removeChild(result); - } - - if (tests) { - result = document.createElement("p"); - result.id = "qunit-testresult"; - result.className = "result"; - tests.parentNode.insertBefore(result, tests); - result.innerHTML = 'Running...
 '; - } - }, - - /** - * Resets the test setup. Useful for tests that modify the DOM. - * - * If jQuery is available, uses jQuery's html(), otherwise just innerHTML. - */ - reset: function() { - if (window.jQuery) { - jQuery("#main, #qunit-fixture").html(config.fixture); - } else { - var main = id('main') || id('qunit-fixture'); - if (main) { - main.innerHTML = config.fixture; - } - } - }, - - /** - * Trigger an event on an element. - * - * @example triggerEvent( document.body, "click" ); - * - * @param {Element} elem - * @param {String} type - */ - triggerEvent: function(elem, type, event) { - if (document.createEvent) { - event = document.createEvent("MouseEvents"); - event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, - 0, 0, 0, 0, 0, false, false, false, false, 0, null); - elem.dispatchEvent(event); - - } else if (elem.fireEvent) { - elem.fireEvent("on" + type); - } - }, - - // Safe object type checking - is: function(type, obj) { - return QUnit.objectType(obj) == type; - }, - - objectType: function(obj) { - if (typeof obj === "undefined") { - return "undefined"; - - // consider: typeof null === object - } - if (obj === null) { - return "null"; - } - - var type = Object.prototype.toString.call(obj) - .match(/^\[object\s(.*)\]$/)[1] || ''; - - switch (type) { - case 'Number': - if (isNaN(obj)) { - return "nan"; - } else { - return "number"; - } - case 'String': - case 'Boolean': - case 'Array': - case 'Date': - case 'RegExp': - case 'Function': - return type.toLowerCase(); - } - if (typeof obj === "object") { - return "object"; - } - return undefined; - }, - - push: function(result, actual, expected, message) { - var details = { - result: result, - message: message, - actual: actual, - expected: expected - }; - - message = escapeHtml(message) || (result ? "okay" : "failed"); - message = '' + message + ""; - expected = escapeHtml(QUnit.jsDump.parse(expected)); - actual = escapeHtml(QUnit.jsDump.parse(actual)); - var output = message + ''; - if (actual != expected) { - output += ''; - output += ''; - } - if (!result) { - var source = sourceFromStacktrace(); - if (source) { - details.source = source; - output += ''; - } - } - output += "
Expected:
' + expected + '
Result:
' + actual + '
Diff:
' + QUnit.diff(expected, actual) + '
Source:
' + source + '
"; - - QUnit.log(details); - - config.current.assertions.push({ - result: !!result, - message: output - }); - }, - - url: function(params) { - params = extend(extend({}, QUnit.urlParams), params); - var querystring = "?", - key; - for (key in params) { - querystring += encodeURIComponent(key) + "=" + - encodeURIComponent(params[ key ]) + "&"; - } - return window.location.pathname + querystring.slice(0, -1); - }, - - // Logging callbacks; all receive a single argument with the listed properties - // run test/logs.html for any related changes - begin: function() { - }, - // done: { failed, passed, total, runtime } - done: function() { - }, - // log: { result, actual, expected, message } - log: function() { - }, - // testStart: { name } - testStart: function() { - }, - // testDone: { name, failed, passed, total } - testDone: function() { - }, - // moduleStart: { name } - moduleStart: function() { - }, - // moduleDone: { name, failed, passed, total } - moduleDone: function() { - } - }); - - if (typeof document === "undefined" || document.readyState === "complete") { - config.autorun = true; - } - - addEvent(window, "load", function() { - QUnit.begin({}); - - // Initialize the config, saving the execution queue - var oldconfig = extend({}, config); - QUnit.init(); - extend(config, oldconfig); - - config.blocking = false; - - var userAgent = id("qunit-userAgent"); - if (userAgent) { - userAgent.innerHTML = navigator.userAgent; - } - var banner = id("qunit-header"); - if (banner) { - banner.innerHTML = ' ' + banner.innerHTML + ' ' + - '' + - ''; - addEvent(banner, "change", function(event) { - var params = {}; - params[ event.target.name ] = event.target.checked ? true : undefined; - window.location = QUnit.url(params); - }); - } - - var toolbar = id("qunit-testrunner-toolbar"); - if (toolbar) { - var filter = document.createElement("input"); - filter.type = "checkbox"; - filter.id = "qunit-filter-pass"; - addEvent(filter, "click", function() { - var ol = document.getElementById("qunit-tests"); - if (filter.checked) { - ol.className = ol.className + " hidepass"; - } else { - var tmp = " " + ol.className.replace(/[\n\t\r]/g, " ") + " "; - ol.className = tmp.replace(/ hidepass /, " "); - } - if (defined.sessionStorage) { - if (filter.checked) { - sessionStorage.setItem("qunit-filter-passed-tests", "true"); - } else { - sessionStorage.removeItem("qunit-filter-passed-tests"); - } - } - }); - if (defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests")) { - filter.checked = true; - var ol = document.getElementById("qunit-tests"); - ol.className = ol.className + " hidepass"; - } - toolbar.appendChild(filter); - - var label = document.createElement("label"); - label.setAttribute("for", "qunit-filter-pass"); - label.innerHTML = "Hide passed tests"; - toolbar.appendChild(label); - } - - var main = id('main') || id('qunit-fixture'); - if (main) { - config.fixture = main.innerHTML; - } - - if (config.autostart) { - QUnit.start(); - } - }); - - function done() { - config.autorun = true; - - // Log the last module results - if (config.currentModule) { - QUnit.moduleDone({ - name: config.currentModule, - failed: config.moduleStats.bad, - passed: config.moduleStats.all - config.moduleStats.bad, - total: config.moduleStats.all - }); - } - - var banner = id("qunit-banner"), - tests = id("qunit-tests"), - runtime = +new Date - config.started, - passed = config.stats.all - config.stats.bad, - html = [ - 'Tests completed in ', - runtime, - ' milliseconds.
', - '', - passed, - ' tests of ', - config.stats.all, - ' passed, ', - config.stats.bad, - ' failed.' - ].join(''); - - if (banner) { - banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); - } - - if (tests) { - id("qunit-testresult").innerHTML = html; - } - - QUnit.done({ - failed: config.stats.bad, - passed: passed, - total: config.stats.all, - runtime: runtime - }); - } - - function validTest(name) { - var filter = config.filter, - run = false; - - if (!filter) { - return true; - } - - var not = filter.charAt(0) === "!"; - if (not) { - filter = filter.slice(1); - } - - if (name.indexOf(filter) !== -1) { - return !not; - } - - if (not) { - run = true; - } - - return run; - } - -// so far supports only Firefox, Chrome and Opera (buggy) -// could be extended in the future to use something like https://github.com/csnover/TraceKit - function sourceFromStacktrace() { - try { - throw new Error(); - } catch (e) { - if (e.stacktrace) { - // Opera - return e.stacktrace.split("\n")[6]; - } else if (e.stack) { - // Firefox, Chrome - return e.stack.split("\n")[4]; - } - } - } - - function escapeHtml(s) { - if (!s) { - return ""; - } - s = s + ""; - return s.replace(/[\&"<>\\]/g, function(s) { - switch (s) { - case "&": return "&"; - case "\\": return "\\\\"; - case '"': return '\"'; - case "<": return "<"; - case ">": return ">"; - default: return s; - } - }); - } - - function synchronize(callback) { - config.queue.push(callback); - - if (config.autorun && !config.blocking) { - process(); - } - } - - function process() { - var start = (new Date()).getTime(); - - while (config.queue.length && !config.blocking) { - if (config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate)) { - config.queue.shift()(); - } else { - window.setTimeout(process, 13); - break; - } - } - if (!config.blocking && !config.queue.length) { - done(); - } - } - - function saveGlobal() { - config.pollution = []; - - if (config.noglobals) { - for (var key in window) { - config.pollution.push(key); - } - } - } - - function checkPollution(name) { - var old = config.pollution; - saveGlobal(); - - var newGlobals = diff(config.pollution, old); - if (newGlobals.length > 0) { - ok(false, "Introduced global variable(s): " + newGlobals.join(", ")); - } - - var deletedGlobals = diff(old, config.pollution); - if (deletedGlobals.length > 0) { - ok(false, "Deleted global variable(s): " + deletedGlobals.join(", ")); - } - } - -// returns a new Array with the elements that are in a but not in b - function diff(a, b) { - var result = a.slice(); - for (var i = 0; i < result.length; i++) { - for (var j = 0; j < b.length; j++) { - if (result[i] === b[j]) { - result.splice(i, 1); - i--; - break; - } - } - } - return result; - } - - function fail(message, exception, callback) { - if (typeof console !== "undefined" && console.error && console.warn) { - console.error(message); - console.error(exception); - console.warn(callback.toString()); - - } else if (window.opera && opera.postError) { - opera.postError(message, exception, callback.toString); - } - } - - function extend(a, b) { - for (var prop in b) { - if (b[prop] === undefined) { - delete a[prop]; - } else { - a[prop] = b[prop]; - } - } - - return a; - } - - function addEvent(elem, type, fn) { - if (elem.addEventListener) { - elem.addEventListener(type, fn, false); - } else if (elem.attachEvent) { - elem.attachEvent("on" + type, fn); - } else { - fn(); - } - } - - function id(name) { - return !!(typeof document !== "undefined" && document && document.getElementById) && - document.getElementById(name); - } - -// Test for equality any JavaScript type. -// Discussions and reference: http://philrathe.com/articles/equiv -// Test suites: http://philrathe.com/tests/equiv -// Author: Philippe Rathé - QUnit.equiv = function () { - - var innerEquiv; // the real equiv function - var callers = []; // stack to decide between skip/abort functions - var parents = []; // stack to avoiding loops from circular referencing - - // Call the o related callback with the given arguments. - function bindCallbacks(o, callbacks, args) { - var prop = QUnit.objectType(o); - if (prop) { - if (QUnit.objectType(callbacks[prop]) === "function") { - return callbacks[prop].apply(callbacks, args); - } else { - return callbacks[prop]; // or undefined - } - } - } - - var callbacks = function () { - - // for string, boolean, number and null - function useStrictEquality(b, a) { - if (b instanceof a.constructor || a instanceof b.constructor) { - // to catch short annotaion VS 'new' annotation of a declaration - // e.g. var i = 1; - // var j = new Number(1); - return a == b; - } else { - return a === b; - } - } - - return { - "string": useStrictEquality, - "boolean": useStrictEquality, - "number": useStrictEquality, - "null": useStrictEquality, - "undefined": useStrictEquality, - - "nan": function (b) { - return isNaN(b); - }, - - "date": function (b, a) { - return QUnit.objectType(b) === "date" && a.valueOf() === b.valueOf(); - }, - - "regexp": function (b, a) { - return QUnit.objectType(b) === "regexp" && - a.source === b.source && // the regex itself - a.global === b.global && // and its modifers (gmi) ... - a.ignoreCase === b.ignoreCase && - a.multiline === b.multiline; - }, - - // - skip when the property is a method of an instance (OOP) - // - abort otherwise, - // initial === would have catch identical references anyway - "function": function () { - var caller = callers[callers.length - 1]; - return caller !== Object && - typeof caller !== "undefined"; - }, - - "array": function (b, a) { - var i, j, loop; - var len; - - // b could be an object literal here - if (! (QUnit.objectType(b) === "array")) { - return false; - } - - len = a.length; - if (len !== b.length) { // safe and faster - return false; - } - - //track reference to avoid circular references - parents.push(a); - for (i = 0; i < len; i++) { - loop = false; - for (j = 0; j < parents.length; j++) { - if (parents[j] === a[i]) { - loop = true;//dont rewalk array - } - } - if (!loop && ! innerEquiv(a[i], b[i])) { - parents.pop(); - return false; - } - } - parents.pop(); - return true; - }, - - "object": function (b, a) { - var i, j, loop; - var eq = true; // unless we can proove it - var aProperties = [], bProperties = []; // collection of strings - - // comparing constructors is more strict than using instanceof - if (a.constructor !== b.constructor) { - return false; - } - - // stack constructor before traversing properties - callers.push(a.constructor); - //track reference to avoid circular references - parents.push(a); - - for (i in a) { // be strict: don't ensures hasOwnProperty and go deep - loop = false; - for (j = 0; j < parents.length; j++) { - if (parents[j] === a[i]) - loop = true; //don't go down the same path twice - } - aProperties.push(i); // collect a's properties - - if (!loop && ! innerEquiv(a[i], b[i])) { - eq = false; - break; - } - } - - callers.pop(); // unstack, we are done - parents.pop(); - - for (i in b) { - bProperties.push(i); // collect b's properties - } - - // Ensures identical properties name - return eq && innerEquiv(aProperties.sort(), bProperties.sort()); - } - }; - }(); - - innerEquiv = function () { // can take multiple arguments - var args = Array.prototype.slice.apply(arguments); - if (args.length < 2) { - return true; // end transition - } - - return (function (a, b) { - if (a === b) { - return true; // catch the most you can - } else if (a === null || b === null || typeof a === "undefined" || typeof b === "undefined" || QUnit.objectType(a) !== QUnit.objectType(b)) { - return false; // don't lose time with error prone cases - } else { - return bindCallbacks(a, callbacks, [b, a]); - } - - // apply transition with (1..n) arguments - })(args[0], args[1]) && arguments.callee.apply(this, args.splice(1, args.length - 1)); - }; - - return innerEquiv; - - }(); - - /** - * jsDump - * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com - * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) - * Date: 5/15/2008 - * @projectDescription Advanced and extensible data dumping for Javascript. - * @version 1.0.0 - * @author Ariel Flesler - * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} - */ - QUnit.jsDump = (function() { - function quote(str) { - return '"' + str.toString().replace(/"/g, '\\"') + '"'; - } - - function literal(o) { - return o + ''; - } - - function join(pre, arr, post) { - var s = jsDump.separator(), - base = jsDump.indent(), - inner = jsDump.indent(1); - if (arr.join) - arr = arr.join(',' + s + inner); - if (!arr) - return pre + post; - return [ pre, inner + arr, base + post ].join(s); - } - - function array(arr) { - var i = arr.length, ret = Array(i); - this.up(); - while (i--) - ret[i] = this.parse(arr[i]); - this.down(); - return join('[', ret, ']'); - } - - var reName = /^function (\w+)/; - - var jsDump = { - parse:function(obj, type) { //type is used mostly internally, you can fix a (custom)type in advance - var parser = this.parsers[ type || this.typeOf(obj) ]; - type = typeof parser; - - return type == 'function' ? parser.call(this, obj) : - type == 'string' ? parser : - this.parsers.error; - }, - typeOf:function(obj) { - var type; - if (obj === null) { - type = "null"; - } else if (typeof obj === "undefined") { - type = "undefined"; - } else if (QUnit.is("RegExp", obj)) { - type = "regexp"; - } else if (QUnit.is("Date", obj)) { - type = "date"; - } else if (QUnit.is("Function", obj)) { - type = "function"; - } else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") { - type = "window"; - } else if (obj.nodeType === 9) { - type = "document"; - } else if (obj.nodeType) { - type = "node"; - } else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) { - type = "array"; - } else { - type = typeof obj; - } - return type; - }, - separator:function() { - return this.multiline ? this.HTML ? '
' : '\n' : this.HTML ? ' ' : ' '; - }, - indent:function(extra) {// extra can be a number, shortcut for increasing-calling-decreasing - if (!this.multiline) - return ''; - var chr = this.indentChar; - if (this.HTML) - chr = chr.replace(/\t/g, ' ').replace(/ /g, ' '); - return Array(this._depth_ + (extra || 0)).join(chr); - }, - up:function(a) { - this._depth_ += a || 1; - }, - down:function(a) { - this._depth_ -= a || 1; - }, - setParser:function(name, parser) { - this.parsers[name] = parser; - }, - // The next 3 are exposed so you can use them - quote:quote, - literal:literal, - join:join, - // - _depth_: 1, - // This is the list of parsers, to modify them, use jsDump.setParser - parsers:{ - window: '[Window]', - document: '[Document]', - error:'[ERROR]', //when no parser is found, shouldn't happen - unknown: '[Unknown]', - 'null':'null', - 'undefined':'undefined', - 'function':function(fn) { - var ret = 'function', - name = 'name' in fn ? fn.name : (reName.exec(fn) || [])[1];//functions never have name in IE - if (name) - ret += ' ' + name; - ret += '('; - - ret = [ ret, QUnit.jsDump.parse(fn, 'functionArgs'), '){'].join(''); - return join(ret, QUnit.jsDump.parse(fn, 'functionCode'), '}'); - }, - array: array, - nodelist: array, - arguments: array, - object:function(map) { - var ret = [ ]; - QUnit.jsDump.up(); - for (var key in map) - ret.push(QUnit.jsDump.parse(key, 'key') + ': ' + QUnit.jsDump.parse(map[key])); - QUnit.jsDump.down(); - return join('{', ret, '}'); - }, - node:function(node) { - var open = QUnit.jsDump.HTML ? '<' : '<', - close = QUnit.jsDump.HTML ? '>' : '>'; - - var tag = node.nodeName.toLowerCase(), - ret = open + tag; - - for (var a in QUnit.jsDump.DOMAttrs) { - var val = node[QUnit.jsDump.DOMAttrs[a]]; - if (val) - ret += ' ' + a + '=' + QUnit.jsDump.parse(val, 'attribute'); - } - return ret + close + open + '/' + tag + close; - }, - functionArgs:function(fn) {//function calls it internally, it's the arguments part of the function - var l = fn.length; - if (!l) return ''; - - var args = Array(l); - while (l--) - args[l] = String.fromCharCode(97 + l);//97 is 'a' - return ' ' + args.join(', ') + ' '; - }, - key:quote, //object calls it internally, the key part of an item in a map - functionCode:'[code]', //function calls it internally, it's the content of the function - attribute:quote, //node calls it internally, it's an html attribute value - string:quote, - date:quote, - regexp:literal, //regex - number:literal, - 'boolean':literal - }, - DOMAttrs:{//attributes to dump from nodes, name=>realName - id:'id', - name:'name', - 'class':'className' - }, - HTML:false,//if true, entities are escaped ( <, >, \t, space and \n ) - indentChar:' ',//indentation unit - multiline:true //if true, items in a collection, are separated by a \n, else just a space. - }; - - return jsDump; - })(); - -// from Sizzle.js - function getText(elems) { - var ret = "", elem; - - for (var i = 0; elems[i]; i++) { - elem = elems[i]; - - // Get the text from text nodes and CDATA nodes - if (elem.nodeType === 3 || elem.nodeType === 4) { - ret += elem.nodeValue; - - // Traverse everything else, except comment nodes - } else if (elem.nodeType !== 8) { - ret += getText(elem.childNodes); - } - } - - return ret; - } - - /* - * Javascript Diff Algorithm - * By John Resig (http://ejohn.org/) - * Modified by Chu Alan "sprite" - * - * Released under the MIT license. - * - * More Info: - * http://ejohn.org/projects/javascript-diff-algorithm/ - * - * Usage: QUnit.diff(expected, actual) - * - * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the quick brown fox jumped jumps over" - */ - QUnit.diff = (function() { - function diff(o, n) { - var ns = new Object(); - var os = new Object(); - - for (var i = 0; i < n.length; i++) { - if (ns[n[i]] == null) - ns[n[i]] = { - rows: new Array(), - o: null - }; - ns[n[i]].rows.push(i); - } - - for (var i = 0; i < o.length; i++) { - if (os[o[i]] == null) - os[o[i]] = { - rows: new Array(), - n: null - }; - os[o[i]].rows.push(i); - } - - for (var i in ns) { - if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) { - n[ns[i].rows[0]] = { - text: n[ns[i].rows[0]], - row: os[i].rows[0] - }; - o[os[i].rows[0]] = { - text: o[os[i].rows[0]], - row: ns[i].rows[0] - }; - } - } - - for (var i = 0; i < n.length - 1; i++) { - if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null && - n[i + 1] == o[n[i].row + 1]) { - n[i + 1] = { - text: n[i + 1], - row: n[i].row + 1 - }; - o[n[i].row + 1] = { - text: o[n[i].row + 1], - row: i + 1 - }; - } - } - - for (var i = n.length - 1; i > 0; i--) { - if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null && - n[i - 1] == o[n[i].row - 1]) { - n[i - 1] = { - text: n[i - 1], - row: n[i].row - 1 - }; - o[n[i].row - 1] = { - text: o[n[i].row - 1], - row: i - 1 - }; - } - } - - return { - o: o, - n: n - }; - } - - return function(o, n) { - o = o.replace(/\s+$/, ''); - n = n.replace(/\s+$/, ''); - var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/)); - - var str = ""; - - var oSpace = o.match(/\s+/g); - if (oSpace == null) { - oSpace = [" "]; - } - else { - oSpace.push(" "); - } - var nSpace = n.match(/\s+/g); - if (nSpace == null) { - nSpace = [" "]; - } - else { - nSpace.push(" "); - } - - if (out.n.length == 0) { - for (var i = 0; i < out.o.length; i++) { - str += '' + out.o[i] + oSpace[i] + ""; - } - } - else { - if (out.n[0].text == null) { - for (n = 0; n < out.o.length && out.o[n].text == null; n++) { - str += '' + out.o[n] + oSpace[n] + ""; - } - } - - for (var i = 0; i < out.n.length; i++) { - if (out.n[i].text == null) { - str += '' + out.n[i] + nSpace[i] + ""; - } - else { - var pre = ""; - - for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) { - pre += '' + out.o[n] + oSpace[n] + ""; - } - str += " " + out.n[i].text + nSpace[i] + pre; - } - } - } - - return str; - }; - })(); - -})(this); diff --git a/addons/web/static/lib/qunit/qunit.css b/addons/web/static/lib/qunit/qunit.css new file mode 100755 index 00000000000..bcecc4c0daf --- /dev/null +++ b/addons/web/static/lib/qunit/qunit.css @@ -0,0 +1,226 @@ +/** + * QUnit v1.2.0 - A JavaScript Unit Testing Framework + * + * http://docs.jquery.com/QUnit + * + * Copyright (c) 2011 John Resig, Jörn Zaefferer + * Dual licensed under the MIT (MIT-LICENSE.txt) + * or GPL (GPL-LICENSE.txt) licenses. + */ + +/** Font Family and Sizes */ + +#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { + font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; +} + +#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } +#qunit-tests { font-size: smaller; } + + +/** Resets */ + +#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult { + margin: 0; + padding: 0; +} + + +/** Header */ + +#qunit-header { + padding: 0.5em 0 0.5em 1em; + + color: #8699a4; + background-color: #0d3349; + + font-size: 1.5em; + line-height: 1em; + font-weight: normal; + + border-radius: 15px 15px 0 0; + -moz-border-radius: 15px 15px 0 0; + -webkit-border-top-right-radius: 15px; + -webkit-border-top-left-radius: 15px; +} + +#qunit-header a { + text-decoration: none; + color: #c2ccd1; +} + +#qunit-header a:hover, +#qunit-header a:focus { + color: #fff; +} + +#qunit-banner { + height: 5px; +} + +#qunit-testrunner-toolbar { + padding: 0.5em 0 0.5em 2em; + color: #5E740B; + background-color: #eee; +} + +#qunit-userAgent { + padding: 0.5em 0 0.5em 2.5em; + background-color: #2b81af; + color: #fff; + text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; +} + + +/** Tests: Pass/Fail */ + +#qunit-tests { + list-style-position: inside; +} + +#qunit-tests li { + padding: 0.4em 0.5em 0.4em 2.5em; + border-bottom: 1px solid #fff; + list-style-position: inside; +} + +#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { + display: none; +} + +#qunit-tests li strong { + cursor: pointer; +} + +#qunit-tests li a { + padding: 0.5em; + color: #c2ccd1; + text-decoration: none; +} +#qunit-tests li a:hover, +#qunit-tests li a:focus { + color: #000; +} + +#qunit-tests ol { + margin-top: 0.5em; + padding: 0.5em; + + background-color: #fff; + + border-radius: 15px; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + + box-shadow: inset 0px 2px 13px #999; + -moz-box-shadow: inset 0px 2px 13px #999; + -webkit-box-shadow: inset 0px 2px 13px #999; +} + +#qunit-tests table { + border-collapse: collapse; + margin-top: .2em; +} + +#qunit-tests th { + text-align: right; + vertical-align: top; + padding: 0 .5em 0 0; +} + +#qunit-tests td { + vertical-align: top; +} + +#qunit-tests pre { + margin: 0; + white-space: pre-wrap; + word-wrap: break-word; +} + +#qunit-tests del { + background-color: #e0f2be; + color: #374e0c; + text-decoration: none; +} + +#qunit-tests ins { + background-color: #ffcaca; + color: #500; + text-decoration: none; +} + +/*** Test Counts */ + +#qunit-tests b.counts { color: black; } +#qunit-tests b.passed { color: #5E740B; } +#qunit-tests b.failed { color: #710909; } + +#qunit-tests li li { + margin: 0.5em; + padding: 0.4em 0.5em 0.4em 0.5em; + background-color: #fff; + border-bottom: none; + list-style-position: inside; +} + +/*** Passing Styles */ + +#qunit-tests li li.pass { + color: #5E740B; + background-color: #fff; + border-left: 26px solid #C6E746; +} + +#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } +#qunit-tests .pass .test-name { color: #366097; } + +#qunit-tests .pass .test-actual, +#qunit-tests .pass .test-expected { color: #999999; } + +#qunit-banner.qunit-pass { background-color: #C6E746; } + +/*** Failing Styles */ + +#qunit-tests li li.fail { + color: #710909; + background-color: #fff; + border-left: 26px solid #EE5757; + white-space: pre; +} + +#qunit-tests > li:last-child { + border-radius: 0 0 15px 15px; + -moz-border-radius: 0 0 15px 15px; + -webkit-border-bottom-right-radius: 15px; + -webkit-border-bottom-left-radius: 15px; +} + +#qunit-tests .fail { color: #000000; background-color: #EE5757; } +#qunit-tests .fail .test-name, +#qunit-tests .fail .module-name { color: #000000; } + +#qunit-tests .fail .test-actual { color: #EE5757; } +#qunit-tests .fail .test-expected { color: green; } + +#qunit-banner.qunit-fail { background-color: #EE5757; } + + +/** Result */ + +#qunit-testresult { + padding: 0.5em 0.5em 0.5em 2.5em; + + color: #2b81af; + background-color: #D2E0E6; + + border-bottom: 1px solid white; +} + +/** Fixture */ + +#qunit-fixture { + position: absolute; + top: -10000px; + left: -10000px; +} diff --git a/addons/web/static/lib/qunit/qunit.js b/addons/web/static/lib/qunit/qunit.js new file mode 100755 index 00000000000..6d2a8a7b8ab --- /dev/null +++ b/addons/web/static/lib/qunit/qunit.js @@ -0,0 +1,1597 @@ +/** + * QUnit v1.2.0 - A JavaScript Unit Testing Framework + * + * http://docs.jquery.com/QUnit + * + * Copyright (c) 2011 John Resig, Jörn Zaefferer + * Dual licensed under the MIT (MIT-LICENSE.txt) + * or GPL (GPL-LICENSE.txt) licenses. + */ + +(function(window) { + +var defined = { + setTimeout: typeof window.setTimeout !== "undefined", + sessionStorage: (function() { + try { + return !!sessionStorage.getItem; + } catch(e) { + return false; + } + })() +}; + +var testId = 0, + toString = Object.prototype.toString, + hasOwn = Object.prototype.hasOwnProperty; + +var Test = function(name, testName, expected, testEnvironmentArg, async, callback) { + this.name = name; + this.testName = testName; + this.expected = expected; + this.testEnvironmentArg = testEnvironmentArg; + this.async = async; + this.callback = callback; + this.assertions = []; +}; +Test.prototype = { + init: function() { + var tests = id("qunit-tests"); + if (tests) { + var b = document.createElement("strong"); + b.innerHTML = "Running " + this.name; + var li = document.createElement("li"); + li.appendChild( b ); + li.className = "running"; + li.id = this.id = "test-output" + testId++; + tests.appendChild( li ); + } + }, + setup: function() { + if (this.module != config.previousModule) { + if ( config.previousModule ) { + runLoggingCallbacks('moduleDone', QUnit, { + name: config.previousModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + } ); + } + config.previousModule = this.module; + config.moduleStats = { all: 0, bad: 0 }; + runLoggingCallbacks( 'moduleStart', QUnit, { + name: this.module + } ); + } + + config.current = this; + this.testEnvironment = extend({ + setup: function() {}, + teardown: function() {} + }, this.moduleTestEnvironment); + if (this.testEnvironmentArg) { + extend(this.testEnvironment, this.testEnvironmentArg); + } + + runLoggingCallbacks( 'testStart', QUnit, { + name: this.testName, + module: this.module + }); + + // allow utility functions to access the current test environment + // TODO why?? + QUnit.current_testEnvironment = this.testEnvironment; + + try { + if ( !config.pollution ) { + saveGlobal(); + } + + this.testEnvironment.setup.call(this.testEnvironment); + } catch(e) { + QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message ); + } + }, + run: function() { + config.current = this; + if ( this.async ) { + QUnit.stop(); + } + + if ( config.notrycatch ) { + this.callback.call(this.testEnvironment); + return; + } + try { + this.callback.call(this.testEnvironment); + } catch(e) { + fail("Test " + this.testName + " died, exception and test follows", e, this.callback); + QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) ); + // else next test will carry the responsibility + saveGlobal(); + + // Restart the tests if they're blocking + if ( config.blocking ) { + QUnit.start(); + } + } + }, + teardown: function() { + config.current = this; + try { + this.testEnvironment.teardown.call(this.testEnvironment); + checkPollution(); + } catch(e) { + QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message ); + } + }, + finish: function() { + config.current = this; + if ( this.expected != null && this.expected != this.assertions.length ) { + QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" ); + } + + var good = 0, bad = 0, + tests = id("qunit-tests"); + + config.stats.all += this.assertions.length; + config.moduleStats.all += this.assertions.length; + + if ( tests ) { + var ol = document.createElement("ol"); + + for ( var i = 0; i < this.assertions.length; i++ ) { + var assertion = this.assertions[i]; + + var li = document.createElement("li"); + li.className = assertion.result ? "pass" : "fail"; + li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed"); + ol.appendChild( li ); + + if ( assertion.result ) { + good++; + } else { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + + // store result when possible + if ( QUnit.config.reorder && defined.sessionStorage ) { + if (bad) { + sessionStorage.setItem("qunit-" + this.module + "-" + this.testName, bad); + } else { + sessionStorage.removeItem("qunit-" + this.module + "-" + this.testName); + } + } + + if (bad == 0) { + ol.style.display = "none"; + } + + var b = document.createElement("strong"); + b.innerHTML = this.name + " (" + bad + ", " + good + ", " + this.assertions.length + ")"; + + var a = document.createElement("a"); + a.innerHTML = "Rerun"; + a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); + + addEvent(b, "click", function() { + var next = b.nextSibling.nextSibling, + display = next.style.display; + next.style.display = display === "none" ? "block" : "none"; + }); + + addEvent(b, "dblclick", function(e) { + var target = e && e.target ? e.target : window.event.srcElement; + if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) { + target = target.parentNode; + } + if ( window.location && target.nodeName.toLowerCase() === "strong" ) { + window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); + } + }); + + var li = id(this.id); + li.className = bad ? "fail" : "pass"; + li.removeChild( li.firstChild ); + li.appendChild( b ); + li.appendChild( a ); + li.appendChild( ol ); + + } else { + for ( var i = 0; i < this.assertions.length; i++ ) { + if ( !this.assertions[i].result ) { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + } + + try { + QUnit.reset(); + } catch(e) { + fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset); + } + + runLoggingCallbacks( 'testDone', QUnit, { + name: this.testName, + module: this.module, + failed: bad, + passed: this.assertions.length - bad, + total: this.assertions.length + } ); + }, + + queue: function() { + var test = this; + synchronize(function() { + test.init(); + }); + function run() { + // each of these can by async + synchronize(function() { + test.setup(); + }); + synchronize(function() { + test.run(); + }); + synchronize(function() { + test.teardown(); + }); + synchronize(function() { + test.finish(); + }); + } + // defer when previous test run passed, if storage is available + var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName); + if (bad) { + run(); + } else { + synchronize(run, true); + }; + } + +}; + +var QUnit = { + + // call on start of module test to prepend name to all tests + module: function(name, testEnvironment) { + config.currentModule = name; + config.currentModuleTestEnviroment = testEnvironment; + }, + + asyncTest: function(testName, expected, callback) { + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + + QUnit.test(testName, expected, callback, true); + }, + + test: function(testName, expected, callback, async) { + var name = '' + testName + '', testEnvironmentArg; + + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + // is 2nd argument a testEnvironment? + if ( expected && typeof expected === 'object') { + testEnvironmentArg = expected; + expected = null; + } + + if ( config.currentModule ) { + name = '' + config.currentModule + ": " + name; + } + + if ( !validTest(config.currentModule + ": " + testName) ) { + return; + } + + var test = new Test(name, testName, expected, testEnvironmentArg, async, callback); + test.module = config.currentModule; + test.moduleTestEnvironment = config.currentModuleTestEnviroment; + test.queue(); + }, + + /** + * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. + */ + expect: function(asserts) { + config.current.expected = asserts; + }, + + /** + * Asserts true. + * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); + */ + ok: function(a, msg) { + a = !!a; + var details = { + result: a, + message: msg + }; + msg = escapeInnerText(msg); + runLoggingCallbacks( 'log', QUnit, details ); + config.current.assertions.push({ + result: a, + message: msg + }); + }, + + /** + * Checks that the first two arguments are equal, with an optional message. + * Prints out both actual and expected values. + * + * Prefered to ok( actual == expected, message ) + * + * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); + * + * @param Object actual + * @param Object expected + * @param String message (optional) + */ + equal: function(actual, expected, message) { + QUnit.push(expected == actual, actual, expected, message); + }, + + notEqual: function(actual, expected, message) { + QUnit.push(expected != actual, actual, expected, message); + }, + + deepEqual: function(actual, expected, message) { + QUnit.push(QUnit.equiv(actual, expected), actual, expected, message); + }, + + notDeepEqual: function(actual, expected, message) { + QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message); + }, + + strictEqual: function(actual, expected, message) { + QUnit.push(expected === actual, actual, expected, message); + }, + + notStrictEqual: function(actual, expected, message) { + QUnit.push(expected !== actual, actual, expected, message); + }, + + raises: function(block, expected, message) { + var actual, ok = false; + + if (typeof expected === 'string') { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + if (actual) { + // we don't want to validate thrown error + if (!expected) { + ok = true; + // expected is a regexp + } else if (QUnit.objectType(expected) === "regexp") { + ok = expected.test(actual); + // expected is a constructor + } else if (actual instanceof expected) { + ok = true; + // expected is a validation function which returns true is validation passed + } else if (expected.call({}, actual) === true) { + ok = true; + } + } + + QUnit.ok(ok, message); + }, + + start: function(count) { + config.semaphore -= count || 1; + if (config.semaphore > 0) { + // don't start until equal number of stop-calls + return; + } + if (config.semaphore < 0) { + // ignore if start is called more often then stop + config.semaphore = 0; + } + // A slight delay, to avoid any current callbacks + if ( defined.setTimeout ) { + window.setTimeout(function() { + if (config.semaphore > 0) { + return; + } + if ( config.timeout ) { + clearTimeout(config.timeout); + } + + config.blocking = false; + process(true); + }, 13); + } else { + config.blocking = false; + process(true); + } + }, + + stop: function(count) { + config.semaphore += count || 1; + config.blocking = true; + + if ( config.testTimeout && defined.setTimeout ) { + clearTimeout(config.timeout); + config.timeout = window.setTimeout(function() { + QUnit.ok( false, "Test timed out" ); + config.semaphore = 1; + QUnit.start(); + }, config.testTimeout); + } + } +}; + +//We want access to the constructor's prototype +(function() { + function F(){}; + F.prototype = QUnit; + QUnit = new F(); + //Make F QUnit's constructor so that we can add to the prototype later + QUnit.constructor = F; +})(); + +// Backwards compatibility, deprecated +QUnit.equals = QUnit.equal; +QUnit.same = QUnit.deepEqual; + +// Maintain internal state +var config = { + // The queue of tests to run + queue: [], + + // block until document ready + blocking: true, + + // when enabled, show only failing tests + // gets persisted through sessionStorage and can be changed in UI via checkbox + hidepassed: false, + + // by default, run previously failed tests first + // very useful in combination with "Hide passed tests" checked + reorder: true, + + // by default, modify document.title when suite is done + altertitle: true, + + urlConfig: ['noglobals', 'notrycatch'], + + //logging callback queues + begin: [], + done: [], + log: [], + testStart: [], + testDone: [], + moduleStart: [], + moduleDone: [] +}; + +// Load paramaters +(function() { + var location = window.location || { search: "", protocol: "file:" }, + params = location.search.slice( 1 ).split( "&" ), + length = params.length, + urlParams = {}, + current; + + if ( params[ 0 ] ) { + for ( var i = 0; i < length; i++ ) { + current = params[ i ].split( "=" ); + current[ 0 ] = decodeURIComponent( current[ 0 ] ); + // allow just a key to turn on a flag, e.g., test.html?noglobals + current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true; + urlParams[ current[ 0 ] ] = current[ 1 ]; + } + } + + QUnit.urlParams = urlParams; + config.filter = urlParams.filter; + + // Figure out if we're running the tests from a server or not + QUnit.isLocal = !!(location.protocol === 'file:'); +})(); + +// Expose the API as global variables, unless an 'exports' +// object exists, in that case we assume we're in CommonJS +if ( typeof exports === "undefined" || typeof require === "undefined" ) { + extend(window, QUnit); + window.QUnit = QUnit; +} else { + extend(exports, QUnit); + exports.QUnit = QUnit; +} + +// define these after exposing globals to keep them in these QUnit namespace only +extend(QUnit, { + config: config, + + // Initialize the configuration options + init: function() { + extend(config, { + stats: { all: 0, bad: 0 }, + moduleStats: { all: 0, bad: 0 }, + started: +new Date, + updateRate: 1000, + blocking: false, + autostart: true, + autorun: false, + filter: "", + queue: [], + semaphore: 0 + }); + + var tests = id( "qunit-tests" ), + banner = id( "qunit-banner" ), + result = id( "qunit-testresult" ); + + if ( tests ) { + tests.innerHTML = ""; + } + + if ( banner ) { + banner.className = ""; + } + + if ( result ) { + result.parentNode.removeChild( result ); + } + + if ( tests ) { + result = document.createElement( "p" ); + result.id = "qunit-testresult"; + result.className = "result"; + tests.parentNode.insertBefore( result, tests ); + result.innerHTML = 'Running...
 '; + } + }, + + /** + * Resets the test setup. Useful for tests that modify the DOM. + * + * If jQuery is available, uses jQuery's html(), otherwise just innerHTML. + */ + reset: function() { + if ( window.jQuery ) { + jQuery( "#qunit-fixture" ).html( config.fixture ); + } else { + var main = id( 'qunit-fixture' ); + if ( main ) { + main.innerHTML = config.fixture; + } + } + }, + + /** + * Trigger an event on an element. + * + * @example triggerEvent( document.body, "click" ); + * + * @param DOMElement elem + * @param String type + */ + triggerEvent: function( elem, type, event ) { + if ( document.createEvent ) { + event = document.createEvent("MouseEvents"); + event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, + 0, 0, 0, 0, 0, false, false, false, false, 0, null); + elem.dispatchEvent( event ); + + } else if ( elem.fireEvent ) { + elem.fireEvent("on"+type); + } + }, + + // Safe object type checking + is: function( type, obj ) { + return QUnit.objectType( obj ) == type; + }, + + objectType: function( obj ) { + if (typeof obj === "undefined") { + return "undefined"; + + // consider: typeof null === object + } + if (obj === null) { + return "null"; + } + + var type = toString.call( obj ).match(/^\[object\s(.*)\]$/)[1] || ''; + + switch (type) { + case 'Number': + if (isNaN(obj)) { + return "nan"; + } else { + return "number"; + } + case 'String': + case 'Boolean': + case 'Array': + case 'Date': + case 'RegExp': + case 'Function': + return type.toLowerCase(); + } + if (typeof obj === "object") { + return "object"; + } + return undefined; + }, + + push: function(result, actual, expected, message) { + var details = { + result: result, + message: message, + actual: actual, + expected: expected + }; + + message = escapeInnerText(message) || (result ? "okay" : "failed"); + message = '' + message + ""; + expected = escapeInnerText(QUnit.jsDump.parse(expected)); + actual = escapeInnerText(QUnit.jsDump.parse(actual)); + var output = message + ''; + if (actual != expected) { + output += ''; + output += ''; + } + if (!result) { + var source = sourceFromStacktrace(); + if (source) { + details.source = source; + output += ''; + } + } + output += "
Expected:
' + expected + '
Result:
' + actual + '
Diff:
' + QUnit.diff(expected, actual) +'
Source:
' + escapeInnerText(source) + '
"; + + runLoggingCallbacks( 'log', QUnit, details ); + + config.current.assertions.push({ + result: !!result, + message: output + }); + }, + + url: function( params ) { + params = extend( extend( {}, QUnit.urlParams ), params ); + var querystring = "?", + key; + for ( key in params ) { + if ( !hasOwn.call( params, key ) ) { + continue; + } + querystring += encodeURIComponent( key ) + "=" + + encodeURIComponent( params[ key ] ) + "&"; + } + return window.location.pathname + querystring.slice( 0, -1 ); + }, + + extend: extend, + id: id, + addEvent: addEvent +}); + +//QUnit.constructor is set to the empty F() above so that we can add to it's prototype later +//Doing this allows us to tell if the following methods have been overwritten on the actual +//QUnit object, which is a deprecated way of using the callbacks. +extend(QUnit.constructor.prototype, { + // Logging callbacks; all receive a single argument with the listed properties + // run test/logs.html for any related changes + begin: registerLoggingCallback('begin'), + // done: { failed, passed, total, runtime } + done: registerLoggingCallback('done'), + // log: { result, actual, expected, message } + log: registerLoggingCallback('log'), + // testStart: { name } + testStart: registerLoggingCallback('testStart'), + // testDone: { name, failed, passed, total } + testDone: registerLoggingCallback('testDone'), + // moduleStart: { name } + moduleStart: registerLoggingCallback('moduleStart'), + // moduleDone: { name, failed, passed, total } + moduleDone: registerLoggingCallback('moduleDone') +}); + +if ( typeof document === "undefined" || document.readyState === "complete" ) { + config.autorun = true; +} + +QUnit.load = function() { + runLoggingCallbacks( 'begin', QUnit, {} ); + + // Initialize the config, saving the execution queue + var oldconfig = extend({}, config); + QUnit.init(); + extend(config, oldconfig); + + config.blocking = false; + + var urlConfigHtml = '', len = config.urlConfig.length; + for ( var i = 0, val; i < len, val = config.urlConfig[i]; i++ ) { + config[val] = QUnit.urlParams[val]; + urlConfigHtml += ''; + } + + var userAgent = id("qunit-userAgent"); + if ( userAgent ) { + userAgent.innerHTML = navigator.userAgent; + } + var banner = id("qunit-header"); + if ( banner ) { + banner.innerHTML = ' ' + banner.innerHTML + ' ' + urlConfigHtml; + addEvent( banner, "change", function( event ) { + var params = {}; + params[ event.target.name ] = event.target.checked ? true : undefined; + window.location = QUnit.url( params ); + }); + } + + var toolbar = id("qunit-testrunner-toolbar"); + if ( toolbar ) { + var filter = document.createElement("input"); + filter.type = "checkbox"; + filter.id = "qunit-filter-pass"; + addEvent( filter, "click", function() { + var ol = document.getElementById("qunit-tests"); + if ( filter.checked ) { + ol.className = ol.className + " hidepass"; + } else { + var tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " "; + ol.className = tmp.replace(/ hidepass /, " "); + } + if ( defined.sessionStorage ) { + if (filter.checked) { + sessionStorage.setItem("qunit-filter-passed-tests", "true"); + } else { + sessionStorage.removeItem("qunit-filter-passed-tests"); + } + } + }); + if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) { + filter.checked = true; + var ol = document.getElementById("qunit-tests"); + ol.className = ol.className + " hidepass"; + } + toolbar.appendChild( filter ); + + var label = document.createElement("label"); + label.setAttribute("for", "qunit-filter-pass"); + label.innerHTML = "Hide passed tests"; + toolbar.appendChild( label ); + } + + var main = id('qunit-fixture'); + if ( main ) { + config.fixture = main.innerHTML; + } + + if (config.autostart) { + QUnit.start(); + } +}; + +addEvent(window, "load", QUnit.load); + +// addEvent(window, "error") gives us a useless event object +window.onerror = function( message, file, line ) { + if ( QUnit.config.current ) { + ok( false, message + ", " + file + ":" + line ); + } else { + test( "global failure", function() { + ok( false, message + ", " + file + ":" + line ); + }); + } +}; + +function done() { + config.autorun = true; + + // Log the last module results + if ( config.currentModule ) { + runLoggingCallbacks( 'moduleDone', QUnit, { + name: config.currentModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + } ); + } + + var banner = id("qunit-banner"), + tests = id("qunit-tests"), + runtime = +new Date - config.started, + passed = config.stats.all - config.stats.bad, + html = [ + 'Tests completed in ', + runtime, + ' milliseconds.
', + '', + passed, + ' tests of ', + config.stats.all, + ' passed, ', + config.stats.bad, + ' failed.' + ].join(''); + + if ( banner ) { + banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); + } + + if ( tests ) { + id( "qunit-testresult" ).innerHTML = html; + } + + if ( config.altertitle && typeof document !== "undefined" && document.title ) { + // show ✖ for good, ✔ for bad suite result in title + // use escape sequences in case file gets loaded with non-utf-8-charset + document.title = [ + (config.stats.bad ? "\u2716" : "\u2714"), + document.title.replace(/^[\u2714\u2716] /i, "") + ].join(" "); + } + + runLoggingCallbacks( 'done', QUnit, { + failed: config.stats.bad, + passed: passed, + total: config.stats.all, + runtime: runtime + } ); +} + +function validTest( name ) { + var filter = config.filter, + run = false; + + if ( !filter ) { + return true; + } + + var not = filter.charAt( 0 ) === "!"; + if ( not ) { + filter = filter.slice( 1 ); + } + + if ( name.indexOf( filter ) !== -1 ) { + return !not; + } + + if ( not ) { + run = true; + } + + return run; +} + +// so far supports only Firefox, Chrome and Opera (buggy) +// could be extended in the future to use something like https://github.com/csnover/TraceKit +function sourceFromStacktrace() { + try { + throw new Error(); + } catch ( e ) { + if (e.stacktrace) { + // Opera + return e.stacktrace.split("\n")[6]; + } else if (e.stack) { + // Firefox, Chrome + return e.stack.split("\n")[4]; + } else if (e.sourceURL) { + // Safari, PhantomJS + // TODO sourceURL points at the 'throw new Error' line above, useless + //return e.sourceURL + ":" + e.line; + } + } +} + +function escapeInnerText(s) { + if (!s) { + return ""; + } + s = s + ""; + return s.replace(/[\&<>]/g, function(s) { + switch(s) { + case "&": return "&"; + case "<": return "<"; + case ">": return ">"; + default: return s; + } + }); +} + +function synchronize( callback, last ) { + config.queue.push( callback ); + + if ( config.autorun && !config.blocking ) { + process(last); + } +} + +function process( last ) { + var start = new Date().getTime(); + config.depth = config.depth ? config.depth + 1 : 1; + + while ( config.queue.length && !config.blocking ) { + if ( !defined.setTimeout || config.updateRate <= 0 || ( ( new Date().getTime() - start ) < config.updateRate ) ) { + config.queue.shift()(); + } else { + window.setTimeout( function(){ + process( last ); + }, 13 ); + break; + } + } + config.depth--; + if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) { + done(); + } +} + +function saveGlobal() { + config.pollution = []; + + if ( config.noglobals ) { + for ( var key in window ) { + if ( !hasOwn.call( window, key ) ) { + continue; + } + config.pollution.push( key ); + } + } +} + +function checkPollution( name ) { + var old = config.pollution; + saveGlobal(); + + var newGlobals = diff( config.pollution, old ); + if ( newGlobals.length > 0 ) { + ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); + } + + var deletedGlobals = diff( old, config.pollution ); + if ( deletedGlobals.length > 0 ) { + ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); + } +} + +// returns a new Array with the elements that are in a but not in b +function diff( a, b ) { + var result = a.slice(); + for ( var i = 0; i < result.length; i++ ) { + for ( var j = 0; j < b.length; j++ ) { + if ( result[i] === b[j] ) { + result.splice(i, 1); + i--; + break; + } + } + } + return result; +} + +function fail(message, exception, callback) { + if ( typeof console !== "undefined" && console.error && console.warn ) { + console.error(message); + console.error(exception); + console.warn(callback.toString()); + + } else if ( window.opera && opera.postError ) { + opera.postError(message, exception, callback.toString); + } +} + +function extend(a, b) { + for ( var prop in b ) { + if ( b[prop] === undefined ) { + delete a[prop]; + + // Avoid "Member not found" error in IE8 caused by setting window.constructor + } else if ( prop !== "constructor" || a !== window ) { + a[prop] = b[prop]; + } + } + + return a; +} + +function addEvent(elem, type, fn) { + if ( elem.addEventListener ) { + elem.addEventListener( type, fn, false ); + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, fn ); + } else { + fn(); + } +} + +function id(name) { + return !!(typeof document !== "undefined" && document && document.getElementById) && + document.getElementById( name ); +} + +function registerLoggingCallback(key){ + return function(callback){ + config[key].push( callback ); + }; +} + +// Supports deprecated method of completely overwriting logging callbacks +function runLoggingCallbacks(key, scope, args) { + //debugger; + var callbacks; + if ( QUnit.hasOwnProperty(key) ) { + QUnit[key].call(scope, args); + } else { + callbacks = config[key]; + for( var i = 0; i < callbacks.length; i++ ) { + callbacks[i].call( scope, args ); + } + } +} + +// Test for equality any JavaScript type. +// Author: Philippe Rathé +QUnit.equiv = function () { + + var innerEquiv; // the real equiv function + var callers = []; // stack to decide between skip/abort functions + var parents = []; // stack to avoiding loops from circular referencing + + // Call the o related callback with the given arguments. + function bindCallbacks(o, callbacks, args) { + var prop = QUnit.objectType(o); + if (prop) { + if (QUnit.objectType(callbacks[prop]) === "function") { + return callbacks[prop].apply(callbacks, args); + } else { + return callbacks[prop]; // or undefined + } + } + } + + var getProto = Object.getPrototypeOf || function (obj) { + return obj.__proto__; + }; + + var callbacks = function () { + + // for string, boolean, number and null + function useStrictEquality(b, a) { + if (b instanceof a.constructor || a instanceof b.constructor) { + // to catch short annotaion VS 'new' annotation of a + // declaration + // e.g. var i = 1; + // var j = new Number(1); + return a == b; + } else { + return a === b; + } + } + + return { + "string" : useStrictEquality, + "boolean" : useStrictEquality, + "number" : useStrictEquality, + "null" : useStrictEquality, + "undefined" : useStrictEquality, + + "nan" : function(b) { + return isNaN(b); + }, + + "date" : function(b, a) { + return QUnit.objectType(b) === "date" + && a.valueOf() === b.valueOf(); + }, + + "regexp" : function(b, a) { + return QUnit.objectType(b) === "regexp" + && a.source === b.source && // the regex itself + a.global === b.global && // and its modifers + // (gmi) ... + a.ignoreCase === b.ignoreCase + && a.multiline === b.multiline; + }, + + // - skip when the property is a method of an instance (OOP) + // - abort otherwise, + // initial === would have catch identical references anyway + "function" : function() { + var caller = callers[callers.length - 1]; + return caller !== Object && typeof caller !== "undefined"; + }, + + "array" : function(b, a) { + var i, j, loop; + var len; + + // b could be an object literal here + if (!(QUnit.objectType(b) === "array")) { + return false; + } + + len = a.length; + if (len !== b.length) { // safe and faster + return false; + } + + // track reference to avoid circular references + parents.push(a); + for (i = 0; i < len; i++) { + loop = false; + for (j = 0; j < parents.length; j++) { + if (parents[j] === a[i]) { + loop = true;// dont rewalk array + } + } + if (!loop && !innerEquiv(a[i], b[i])) { + parents.pop(); + return false; + } + } + parents.pop(); + return true; + }, + + "object" : function(b, a) { + var i, j, loop; + var eq = true; // unless we can proove it + var aProperties = [], bProperties = []; // collection of + // strings + + // comparing constructors is more strict than using + // instanceof + if (a.constructor !== b.constructor) { + // Allow objects with no prototype to be equivalent to + // objects with Object as their constructor. + if (!((getProto(a) === null && getProto(b) === Object.prototype) || + (getProto(b) === null && getProto(a) === Object.prototype))) + { + return false; + } + } + + // stack constructor before traversing properties + callers.push(a.constructor); + // track reference to avoid circular references + parents.push(a); + + for (i in a) { // be strict: don't ensures hasOwnProperty + // and go deep + loop = false; + for (j = 0; j < parents.length; j++) { + if (parents[j] === a[i]) + loop = true; // don't go down the same path + // twice + } + aProperties.push(i); // collect a's properties + + if (!loop && !innerEquiv(a[i], b[i])) { + eq = false; + break; + } + } + + callers.pop(); // unstack, we are done + parents.pop(); + + for (i in b) { + bProperties.push(i); // collect b's properties + } + + // Ensures identical properties name + return eq + && innerEquiv(aProperties.sort(), bProperties + .sort()); + } + }; + }(); + + innerEquiv = function() { // can take multiple arguments + var args = Array.prototype.slice.apply(arguments); + if (args.length < 2) { + return true; // end transition + } + + return (function(a, b) { + if (a === b) { + return true; // catch the most you can + } else if (a === null || b === null || typeof a === "undefined" + || typeof b === "undefined" + || QUnit.objectType(a) !== QUnit.objectType(b)) { + return false; // don't lose time with error prone cases + } else { + return bindCallbacks(a, callbacks, [ b, a ]); + } + + // apply transition with (1..n) arguments + })(args[0], args[1]) + && arguments.callee.apply(this, args.splice(1, + args.length - 1)); + }; + + return innerEquiv; + +}(); + +/** + * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | + * http://flesler.blogspot.com Licensed under BSD + * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008 + * + * @projectDescription Advanced and extensible data dumping for Javascript. + * @version 1.0.0 + * @author Ariel Flesler + * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} + */ +QUnit.jsDump = (function() { + function quote( str ) { + return '"' + str.toString().replace(/"/g, '\\"') + '"'; + }; + function literal( o ) { + return o + ''; + }; + function join( pre, arr, post ) { + var s = jsDump.separator(), + base = jsDump.indent(), + inner = jsDump.indent(1); + if ( arr.join ) + arr = arr.join( ',' + s + inner ); + if ( !arr ) + return pre + post; + return [ pre, inner + arr, base + post ].join(s); + }; + function array( arr, stack ) { + var i = arr.length, ret = Array(i); + this.up(); + while ( i-- ) + ret[i] = this.parse( arr[i] , undefined , stack); + this.down(); + return join( '[', ret, ']' ); + }; + + var reName = /^function (\w+)/; + + var jsDump = { + parse:function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance + stack = stack || [ ]; + var parser = this.parsers[ type || this.typeOf(obj) ]; + type = typeof parser; + var inStack = inArray(obj, stack); + if (inStack != -1) { + return 'recursion('+(inStack - stack.length)+')'; + } + //else + if (type == 'function') { + stack.push(obj); + var res = parser.call( this, obj, stack ); + stack.pop(); + return res; + } + // else + return (type == 'string') ? parser : this.parsers.error; + }, + typeOf:function( obj ) { + var type; + if ( obj === null ) { + type = "null"; + } else if (typeof obj === "undefined") { + type = "undefined"; + } else if (QUnit.is("RegExp", obj)) { + type = "regexp"; + } else if (QUnit.is("Date", obj)) { + type = "date"; + } else if (QUnit.is("Function", obj)) { + type = "function"; + } else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") { + type = "window"; + } else if (obj.nodeType === 9) { + type = "document"; + } else if (obj.nodeType) { + type = "node"; + } else if ( + // native arrays + toString.call( obj ) === "[object Array]" || + // NodeList objects + ( typeof obj.length === "number" && typeof obj.item !== "undefined" && ( obj.length ? obj.item(0) === obj[0] : ( obj.item( 0 ) === null && typeof obj[0] === "undefined" ) ) ) + ) { + type = "array"; + } else { + type = typeof obj; + } + return type; + }, + separator:function() { + return this.multiline ? this.HTML ? '
' : '\n' : this.HTML ? ' ' : ' '; + }, + indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing + if ( !this.multiline ) + return ''; + var chr = this.indentChar; + if ( this.HTML ) + chr = chr.replace(/\t/g,' ').replace(/ /g,' '); + return Array( this._depth_ + (extra||0) ).join(chr); + }, + up:function( a ) { + this._depth_ += a || 1; + }, + down:function( a ) { + this._depth_ -= a || 1; + }, + setParser:function( name, parser ) { + this.parsers[name] = parser; + }, + // The next 3 are exposed so you can use them + quote:quote, + literal:literal, + join:join, + // + _depth_: 1, + // This is the list of parsers, to modify them, use jsDump.setParser + parsers:{ + window: '[Window]', + document: '[Document]', + error:'[ERROR]', //when no parser is found, shouldn't happen + unknown: '[Unknown]', + 'null':'null', + 'undefined':'undefined', + 'function':function( fn ) { + var ret = 'function', + name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE + if ( name ) + ret += ' ' + name; + ret += '('; + + ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join(''); + return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' ); + }, + array: array, + nodelist: array, + arguments: array, + object:function( map, stack ) { + var ret = [ ]; + QUnit.jsDump.up(); + for ( var key in map ) { + var val = map[key]; + ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(val, undefined, stack)); + } + QUnit.jsDump.down(); + return join( '{', ret, '}' ); + }, + node:function( node ) { + var open = QUnit.jsDump.HTML ? '<' : '<', + close = QUnit.jsDump.HTML ? '>' : '>'; + + var tag = node.nodeName.toLowerCase(), + ret = open + tag; + + for ( var a in QUnit.jsDump.DOMAttrs ) { + var val = node[QUnit.jsDump.DOMAttrs[a]]; + if ( val ) + ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' ); + } + return ret + close + open + '/' + tag + close; + }, + functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function + var l = fn.length; + if ( !l ) return ''; + + var args = Array(l); + while ( l-- ) + args[l] = String.fromCharCode(97+l);//97 is 'a' + return ' ' + args.join(', ') + ' '; + }, + key:quote, //object calls it internally, the key part of an item in a map + functionCode:'[code]', //function calls it internally, it's the content of the function + attribute:quote, //node calls it internally, it's an html attribute value + string:quote, + date:quote, + regexp:literal, //regex + number:literal, + 'boolean':literal + }, + DOMAttrs:{//attributes to dump from nodes, name=>realName + id:'id', + name:'name', + 'class':'className' + }, + HTML:false,//if true, entities are escaped ( <, >, \t, space and \n ) + indentChar:' ',//indentation unit + multiline:true //if true, items in a collection, are separated by a \n, else just a space. + }; + + return jsDump; +})(); + +// from Sizzle.js +function getText( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += getText( elem.childNodes ); + } + } + + return ret; +}; + +//from jquery.js +function inArray( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; +} + +/* + * Javascript Diff Algorithm + * By John Resig (http://ejohn.org/) + * Modified by Chu Alan "sprite" + * + * Released under the MIT license. + * + * More Info: + * http://ejohn.org/projects/javascript-diff-algorithm/ + * + * Usage: QUnit.diff(expected, actual) + * + * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the quick brown fox jumped jumps over" + */ +QUnit.diff = (function() { + function diff(o, n) { + var ns = {}; + var os = {}; + + for (var i = 0; i < n.length; i++) { + if (ns[n[i]] == null) + ns[n[i]] = { + rows: [], + o: null + }; + ns[n[i]].rows.push(i); + } + + for (var i = 0; i < o.length; i++) { + if (os[o[i]] == null) + os[o[i]] = { + rows: [], + n: null + }; + os[o[i]].rows.push(i); + } + + for (var i in ns) { + if ( !hasOwn.call( ns, i ) ) { + continue; + } + if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) { + n[ns[i].rows[0]] = { + text: n[ns[i].rows[0]], + row: os[i].rows[0] + }; + o[os[i].rows[0]] = { + text: o[os[i].rows[0]], + row: ns[i].rows[0] + }; + } + } + + for (var i = 0; i < n.length - 1; i++) { + if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null && + n[i + 1] == o[n[i].row + 1]) { + n[i + 1] = { + text: n[i + 1], + row: n[i].row + 1 + }; + o[n[i].row + 1] = { + text: o[n[i].row + 1], + row: i + 1 + }; + } + } + + for (var i = n.length - 1; i > 0; i--) { + if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null && + n[i - 1] == o[n[i].row - 1]) { + n[i - 1] = { + text: n[i - 1], + row: n[i].row - 1 + }; + o[n[i].row - 1] = { + text: o[n[i].row - 1], + row: i - 1 + }; + } + } + + return { + o: o, + n: n + }; + } + + return function(o, n) { + o = o.replace(/\s+$/, ''); + n = n.replace(/\s+$/, ''); + var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/)); + + var str = ""; + + var oSpace = o.match(/\s+/g); + if (oSpace == null) { + oSpace = [" "]; + } + else { + oSpace.push(" "); + } + var nSpace = n.match(/\s+/g); + if (nSpace == null) { + nSpace = [" "]; + } + else { + nSpace.push(" "); + } + + if (out.n.length == 0) { + for (var i = 0; i < out.o.length; i++) { + str += '' + out.o[i] + oSpace[i] + ""; + } + } + else { + if (out.n[0].text == null) { + for (n = 0; n < out.o.length && out.o[n].text == null; n++) { + str += '' + out.o[n] + oSpace[n] + ""; + } + } + + for (var i = 0; i < out.n.length; i++) { + if (out.n[i].text == null) { + str += '' + out.n[i] + nSpace[i] + ""; + } + else { + var pre = ""; + + for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) { + pre += '' + out.o[n] + oSpace[n] + ""; + } + str += " " + out.n[i].text + nSpace[i] + pre; + } + } + } + + return str; + }; +})(); + +})(this); diff --git a/addons/web/static/lib/qweb/qweb2.js b/addons/web/static/lib/qweb/qweb2.js index a6a6da5a6d7..093b3651fa0 100644 --- a/addons/web/static/lib/qweb/qweb2.js +++ b/addons/web/static/lib/qweb/qweb2.js @@ -373,6 +373,12 @@ QWeb2.Engine = (function() { if (!this.jQuery) { return this.tools.exception("Can't extend template " + template + " without jQuery"); } + var template_dest = this.templates[template], + msie_trololo = false; + if (template_dest.xml !== undefined) { + template_dest = this.jQuery(template_dest.xml); + msie_trololo = true; + } for (var i = 0, ilen = extend_node.childNodes.length; i < ilen; i++) { var child = extend_node.childNodes[i]; if (child.nodeType === 1) { @@ -382,7 +388,7 @@ QWeb2.Engine = (function() { target, error_msg = "Error while extending template '" + template; if (jquery) { - target = this.jQuery(jquery, this.templates[template]); + target = this.jQuery(jquery, template_dest); } else if (xpath) { // NOTE: due to the XPath implementation, extending a template will only work once // when using XPath because XPathResult won't match objects with other constructor than 'Element' @@ -415,6 +421,9 @@ QWeb2.Engine = (function() { } } } + if (msie_trololo) { + this.templates[template] = template_dest[0]; + } } }); return Engine; diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index d8f31af1d35..3a163beb832 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1,4 +1,3 @@ -/* TODO: separate openerp web client page css from openerp views css */ body.openerp { padding: 0; margin: 0; @@ -6,10 +5,17 @@ body.openerp { min-width: 1000px; overflow-y: scroll; font-size: 80%; + font-family: Ubuntu, Helvetica, sans-serif; } body.openerp, .openerp textarea, .openerp input, .openerp select, .openerp option, .openerp button, .openerp .ui-widget { font-family: Ubuntu, Helvetica, sans-serif; + font-size:85%; +} + +.openerp .view-manager-main-content { + width: 100%; + padding: 0 8px 8px 8px; } .oe_box { @@ -29,6 +35,17 @@ body.openerp, .openerp textarea, .openerp input, .openerp select, .openerp optio .openerp .oe-listview .oe-number { text-align: right !important; } +.oe-listview-header-columns { + background: #444; /* Old browsers */ + background: -moz-linear-gradient(top, #ffffff 0%, #d1d1d1 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(100%,#d1d1d1)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* Opera11.10+ */ + background: -ms-linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* IE10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#d1d1d1',GradientType=0 ); /* IE6-9 */ + background: linear-gradient(top, #ffffff 0%,#d1d1d1 100%); /* W3C */ +} + .openerp .oe_hide { display: none !important; } @@ -261,7 +278,7 @@ label.error { filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#BD5E54', endColorstr='#90322A',GradientType=0 ); /* IE6-9 */ background: linear-gradient(top, #bd5e54 0%,#90322a 60%); /* W3C */ - border: 1px solid #6E2A24; + border: 1px solid #5E1A14; border-radius: 4px; -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -272,7 +289,7 @@ label.error { text-transform: uppercase; line-height: 20px; font-weight: bold; - font-size: 85%; + font-size: 75%; white-space: nowrap; } @@ -331,6 +348,7 @@ label.error { height: 100%; display: block; position: relative; + font-size:85%; } .openerp .secondary_menu.oe_folded { width: 20px; @@ -371,6 +389,10 @@ label.error { white-space: nowrap; color: white; text-shadow: 0 1px 0 #333; + +} +.openerp a.oe_secondary_submenu_item { + padding: 0 5px 2px 10px; } .openerp a.oe_secondary_submenu_item:hover, .openerp a.oe_secondary_submenu_item.leaf.active { @@ -383,7 +405,7 @@ label.error { background: -ms-linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* IE10+ */ filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#5A5858',GradientType=0 ); /* IE6-9 */ background: linear-gradient(top, #ffffff 0%,#d8d8d8 11%,#afafaf 86%,#333333 91%,#5a5858 96%); /* W3C */ - padding: 0 5px 2px 5px; + padding: 0 5px 2px 10px; line-height: 20px; color: #3f3d3d; text-decoration: none; @@ -431,6 +453,8 @@ label.error { margin: 0; padding: 4px 10px; text-shadow: 0 1px 0 #111111; + font-weight:normal; + line-height:14px; } .openerp .header_title small { color: #ccc; @@ -464,15 +488,11 @@ label.error { filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#929292', endColorstr='#4D4D4D',GradientType=0 ); } .openerp .header_corner ul.block { - /*float: left;*/ list-style: none; height: 34px; margin: 0; padding: 0 0 0 2px; - /*background: url(../images/top-sep-a.png) no-repeat;*/ line-height: 33px; - /*font-size: 1em;*/ - /*text-transform: uppercase;*/ } .openerp .header_corner ul.block li { float: left; @@ -498,6 +518,10 @@ label.error { font-weight: bold; } +.openerp .logout { + font-size:80%; +} + /* Footer */ .openerp div.oe_footer { background: none repeat scroll 0 0 #CCCCCC; @@ -530,7 +554,7 @@ label.error { } .openerp h2.oe_view_title { - font-size: 175%; + font-size: 110%; font-weight: normal; margin: 2px 0; color: #252424; @@ -541,12 +565,15 @@ label.error { .openerp .oe_vm_switch { float: right; } +.openerp .oe-view-manager-header .oe_view_title { + font-size:150%; +} /* SearchView */ .openerp .filter_label, .openerp .filter_icon { - border: 1px solid #666; border-left-width: 0; background: #F0F0F0; + border: 1px solid #999; background: -moz-linear-gradient(top, #F0F0F0 0%, #C0C0C0 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F0F0F0), color-stop(100%,#C0C0C0)); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F0F0F0', endColorstr='#C0C0C0',GradientType=0 ); @@ -558,13 +585,13 @@ label.error { filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F0F0F0', endColorstr='#A1A7CE',GradientType=0 ); } .openerp .filter_label:active, .openerp .filter_icon:active { - background: #AAAAAA; + background: #aaa; background: -moz-linear-gradient(top, #999999 0%, #EEEEEE 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#999999), color-stop(100%,#EEEEEE)); filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#999999', endColorstr='#EEEEEE',GradientType=0 ); } .openerp .filter_label.enabled, .openerp .filter_icon.enabled { - background: #AAAAAA; + background: #aaa; } .openerp .filter_icon { height: 22px; @@ -588,13 +615,16 @@ label.error { white-space: nowrap; } .openerp .filter_label_group button:first-child { - border-left: 1px solid #666; -webkit-border-top-left-radius: 7px; -webkit-border-bottom-left-radius: 7px; -moz-border-radius-topleft: 7px; -moz-border-radius-bottomleft: 7px; border-top-left-radius: 7px; border-bottom-left-radius: 7px; + border-right: none; +} +.openerp .filter_label_group button { + border-right: none; } .openerp .filter_label_group button:last-child { -webkit-border-top-right-radius: 7px; @@ -603,6 +633,20 @@ label.error { -moz-border-radius-bottomright: 7px; border-top-right-radius: 7px; border-bottom-right-radius: 7px; + border-right: 1px solid #999; +} +.openerp .filter_label_group button.filter_icon img { + padding: 1px 8px 0 8px; +} +.openerp .filter_label_group button.filter_icon:first-child { + border-left: solid 1px #999; + margin-left: -7px; + -webkit-border-top-left-radius: 0px; + -webkit-border-bottom-left-radius: 0px; + -moz-border-radius-topleft: 0px; + -moz-border-radius-bottomleft: 0px; + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; } .openerp .searchview_group_string { @@ -628,8 +672,16 @@ label.error { .openerp .searchview_group.expanded .searchview_group_content { display: block; } -.openerp .searchview_group_content { - padding-left: 10px; + +.openerp .searchview_group_content .oe_label, .openerp .searchview_group_content .oe_label_help { + font-weight: bold; + color: #4c4c4c; +} + +.openerp .oe-searchview-render-line .oe_label, .openerp .oe-searchview-render-line .oe_label_help { + font-weight: bold; + font-size: 80%; + white-space: nowrap; } .openerp .searchview_extended_group { @@ -715,20 +767,27 @@ label.error { text-align: left; padding: 1px 2px; } -.openerp .oe-listview th.oe-record-selector, -.openerp .oe-listview td.oe-button, -.openerp .oe-listview td.oe-record-delete { - padding: 0 1px; + +.openerp .oe-record-delete button, +.openerp button.oe-edit-row-save { + border: none; + height: 12px; + width: 12px; + background: url("/web/static/src/img/iconset-b-remove.png") no-repeat scroll center center transparent; + cursor: pointer; +} +.openerp button.oe-edit-row-save { + background-image: url('/web/static/src/img/icons/save-document.png'); } /* Could use :not selectors if they were supported by MSIE8... */ .openerp .oe-listview tbody td { - border-left: 1px solid #dadada; + border-left: 1px solid #dadada; /*currently commenting to test with no vertical lines in list view*/ } .openerp .oe-listview tbody td:first-child, .openerp .oe-listview tbody td.oe-button, -.openerp .oe-listview tbody td.oe-button+td, -.openerp .oe-listview tbody th.oe-record-selector+td, +.openerp .oe-listview tbody td.oe-button, +.openerp .oe-listview tbody th.oe-record-selector, .openerp .oe-listview tbody td.oe-record-delete { border-left: none; } @@ -738,15 +797,36 @@ label.error { } .openerp .oe-listview th.oe-sortable { cursor: pointer; + font-size: 75%; + text-transform: uppercase; + padding: 0; + margin: 0; + padding-left: 3px; + color: #333; } .openerp .oe-listview th.oe-sortable .ui-icon { - height: 1em; + height: 60%; + margin: -6px 0 0; display: inline; display: inline-block; + vertical-align: middle; +} + +.openerp .oe-listview table tbody td { + border-bottom: 1px solid #E3E3E3; +} + +.openerp .oe-listview .oe-record-selector { + border-bottom: 1px solid #E3E3E3; } .openerp .oe-listview .oe-field-cell { cursor: pointer; + margin-top: 0; + margin-bottom: 0; + padding-top: 3px; + padding-bottom: 3px; + font-size: 80%; } .openerp .oe-listview .oe-field-cell progress { width: 100%; @@ -778,6 +858,8 @@ label.error { } .openerp .oe-list-pager .oe-pager-state { cursor: pointer; + font-size: 90%; + color: #555; } .openerp .oe-listview .oe-group-name { @@ -794,6 +876,8 @@ label.error { .openerp .oe-listview .oe-list-footer { text-align: center; white-space: nowrap; + color: #444; + font-size: 85%; } .openerp .oe-listview .oe-list-footer span { margin: 0 1em; @@ -846,28 +930,68 @@ label.error { } .openerp .oe_form_notebook .ui-tabs-panel { padding: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-right-radius: 4px; + border-top-right-radius: 4px; } .openerp .oe_form_notebook ul.ui-tabs-nav { padding-left: 0; background: transparent; - border-width: 0 0 1px 0; + border-width: 0; border-radius: 0; -moz-border-radius: 0; -webkit-border-radius: 0; - line-height: 0.5em; + line-height: 0.8em; + font-size: 95%; + color: #555; } .openerp .oe_form_notebook ul.ui-tabs-nav li { font-weight: bold; } .openerp .oe_form_notebook .ui-tabs-panel { background: #f9f9f9; - border-width: 0 1px 1px 1px; + border-width: 1px; } .openerp .oe_form_notebook .ui-tabs-selected { background: #f9f9f9; } +/* Unedit Form */ +.openerp .field_char, +.openerp .field_date, +.openerp .field_float, +.openerp .field_selection, +.openerp .oe_form_field_many2one a, +.openerp .oe_form_field_reference a{ + vertical-align: middle; + padding-top: 3px; + font-size: 90%; + color: #222; +} +.openerp .oe_form_field_many2one a, +.openerp .oe_form_field_reference a { + color: #9A0404; + line-height: 12px; +} + + /* Form */ + +.openerp .oe_form_frame_cell input[type="checkbox"] { + margin-top: 3px; + vertical-align: center; +} +.openerp .oe_form_frame_cell .input[type="text"] { + padding-bottom: 1px; +} + +.openerp table.oe_frame td { + color: #4c4c4c; +} +.openerp td.oe_form_frame_cell { + padding: 2px; + position: relative; +} .openerp .oe_frame.oe_forms { clear: both; } @@ -889,6 +1013,9 @@ label.error { padding: 2px; position: relative; } +.openerp td.oe_form_field_boolean { + padding-top: 4px; +} .openerp td.oe_form_frame_cell.oe_form_group { padding: 0; } @@ -900,14 +1027,31 @@ label.error { } .openerp .oe_form_pager, .openerp .oe_list_pager { float: right; + font-size: 80%; + color: gray; + font-weight: bold; +} + +.openerp .oe_form_pager { + margin-right: 3px; +} + + +.openerp label.oe_label_help, .openerp label.oe_label, .openerp .oe_forms input[type="text"], .openerp .oe_forms input[type="password"], .openerp .oe_forms select, .openerp .oe_forms .oe_button, .openerp .oe_forms textarea { + font-size: 85%; } .openerp label.oe_label_help, .openerp label.oe_label { display: block; + color: #4c4c4c; + font-weight: normal; } .openerp label.oe_label_help { cursor: help; } +.openerp .oe_form_frame_cell .oe_label, .openerp .oe_form_frame_cell .oe_label_help { + font-weight: normal; +} .openerp #tiptip_content { font-size: 12px; } @@ -926,8 +1070,13 @@ label.error { } .openerp .oe_forms label.oe_label, .openerp .oe_forms label.oe_label_help { - margin: 3px 0 0 10px; + margin: 4px 0 0 3px; + white-space: nowrap; } +.openerp .oe_forms .searchview_group_content label.oe_label, .openerp .searchview_group_content .oe_forms label.oe_label_help { /* making a distinction between labels in search view and other labels */ + margin: 3px 0 0 3px; +} + .openerp label.oe_label_help span { font-size: 80%; color: darkgreen; @@ -949,13 +1098,29 @@ label.error { margin: 3px 0 0 0; } +/* Uneditable Form View */ +.openerp .oe_form_readonly { + +} +.openerp .oe_form_readonly .field_char, .openerp .oe_form_readonly .oe_form_field_email { + padding-top: 4px; + background-color: white; +} + +.openerp .oe_form_readonly .field_selection { + padding-top: 2px; + background-color: white; +} + + /* Inputs */ .openerp .oe_forms input[type="text"], .openerp .oe_forms input[type="password"], .openerp .oe_forms select, .openerp .oe_forms textarea { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; - padding: 0 2px 0 2px; + padding: 0 2px; + margin: 0 2px; border: 1px solid #999; -moz-border-radius: 3px; -webkit-border-radius: 3px; @@ -964,6 +1129,10 @@ label.error { min-width: 90px; color: #1f1f1f; } +.openerp .oe_forms select{ + padding-top: 2px; +} + .openerp .oe_forms textarea { resize:vertical; } @@ -979,6 +1148,9 @@ label.error { min-width: 100%; width: 100%; } +.openerp .oe_forms .button { + height: 22px; +} @-moz-document url-prefix() { /* Strange firefox behaviour on width: 100% + white-space: nowrap */ .openerp .oe_forms .oe_button { @@ -992,9 +1164,9 @@ label.error { .openerp .oe_input_icon { position: absolute; cursor: pointer; - right: 5px; - top: 3px; - z-index: 2; + right: 4px; + top: 5px; + z-index: 1; } .openerp .oe_datepicker_container { position: absolute; @@ -1003,7 +1175,6 @@ label.error { display: none; } .openerp .oe_datepicker_root { - position: relative; display: inline-block; } .openerp .oe_forms.oe_frame .oe_datepicker_root { @@ -1017,13 +1188,6 @@ label.error { right: 5px; top: 3px; } -.openerp img.oe_field_translate { - margin-left: -21px; - vertical-align: top; - cursor: pointer; - position: relative; - top: 4px; -} .openerp .oe_trad_field.touched { border: 1px solid green !important; } @@ -1055,10 +1219,14 @@ label.error { border: 0 solid #666; } .openerp .separator.horizontal { - font-weight: bold; + font-weight: bold; border-bottom-width: 1px; margin: 3px 4px 3px 1px; - height: 15px; + height: 17px; + font-size: 95%; +} +.openerp .separator.horizontal:empty { + height: 5px; } .openerp .oe_form_frame_cell.oe_form_separator_vertical { border-left: 1px solid #666; @@ -1095,6 +1263,14 @@ label.error { background: white; min-width: 90px; } +.openerp tbody.ui-widget-content { + margin-bottom: 10px; + border-spacing: 4px; +} +.openerp .ui-widget-header { + background-image: none; + background-color: white; +} /* Sidebar */ .openerp .view-manager-main-table { @@ -1108,16 +1284,13 @@ label.error { vertical-align: top; } -.openerp .view-manager-main-content { - width: 100%; -} .openerp .oe-view-manager-header { overflow: auto; } .openerp .oe-view-manager-header h2 { float: left; } -.openerp .oe-view-manager-header blockquote { +.openerp .oe_view_manager_menu_tips blockquote { display: none; font-size: 85%; margin: 0; @@ -1126,14 +1299,14 @@ label.error { padding: 1px 10px; color: #4C4C4C; } -.openerp .oe-view-manager-header blockquote p { +.openerp .oe_view_manager_menu_tips blockquote p { margin: 0; padding: 6px 1px 4px; } -.openerp .oe-view-manager-header blockquote div { +.openerp .oe_view_manager_menu_tips blockquote div { text-align: right; } -.openerp .oe-view-manager-header blockquote div button { +.openerp .oe_view_manager_menu_tips blockquote div button { border: none; background: none; padding: 0 4px; @@ -1365,6 +1538,7 @@ label.error { } .openerp .oe_forms .oe-m2o input[type="text"] { padding-right: 20px; + padding-top: 2px; } .openerp .oe-m2o-drop-down-button { margin-left: -23px; @@ -1374,12 +1548,12 @@ label.error { margin-bottom: -4px; cursor: pointer; } -.openerp .oe-m2o-cm-button img { - margin-left: 4px; -} .openerp .oe-m2o-disabled-cm { color: grey; } +.openerp ul[role="listbox"] li a { + font-size:80%; +} .parent_top { vertical-align: text-top; } @@ -1425,20 +1599,19 @@ label.error { /* Shortcuts*/ .oe-shortcut-toggle { height: 20px; + margin-top: 3px; padding: 0; width: 24px; cursor: pointer; display: block; - background: url(/web/static/src/img/add-shortcut.png) no-repeat bottom; + background: url(/web/static/src/img/add-shortcut.png) no-repeat center center; float: left; } .oe-shortcut-remove{ - background: url(/web/static/src/img/remove-shortcut.png) no-repeat bottom; + background: url(/web/static/src/img/remove-shortcut.png) no-repeat center center; } -/* ================ */ .oe-shortcuts { position: absolute; - margin: 0; padding: 6px 15px; top: 37px; @@ -1463,9 +1636,14 @@ label.error { color: #fff; text-align: center; border-left: 1px solid #909090; - padding: 4px; - font-size: 90%; + padding: 0 4px; + font-size: 80%; font-weight: normal; + vertical-align: top; +} + +.oe-shortcuts li:hover { + background-color: #666; } .oe-shortcuts li:first-child { border-left: none; @@ -1535,4 +1713,3 @@ ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after { .openerp .oe_view_editor_tree_grid a { display: block; } - diff --git a/addons/web/static/src/css/data_import.css b/addons/web/static/src/css/data_import.css index e5d1c9a910c..a63a52802f0 100644 --- a/addons/web/static/src/css/data_import.css +++ b/addons/web/static/src/css/data_import.css @@ -27,7 +27,7 @@ .openerp .oe-import fieldset.oe-closed table { display: none; } -.openerp .separator.horizontal { +.openerp .oe-import .separator.horizontal { font-weight: bold; border-bottom-width: 1px; margin: 6px 4px 6px 1px; diff --git a/addons/web/static/src/img/icons/lead-stage-won.png b/addons/web/static/src/img/icons/kanban-apply.png similarity index 100% rename from addons/web/static/src/img/icons/lead-stage-won.png rename to addons/web/static/src/img/icons/kanban-apply.png diff --git a/addons/web/static/src/img/icons/lead-stage-pending.png b/addons/web/static/src/img/icons/kanban-pause.png similarity index 100% rename from addons/web/static/src/img/icons/lead-stage-pending.png rename to addons/web/static/src/img/icons/kanban-pause.png diff --git a/addons/web/static/src/img/icons/lead-stage-lost.png b/addons/web/static/src/img/icons/kanban-stop.png similarity index 100% rename from addons/web/static/src/img/icons/lead-stage-lost.png rename to addons/web/static/src/img/icons/kanban-stop.png diff --git a/addons/web/static/src/img/icons/save-document.png b/addons/web/static/src/img/icons/save-document.png new file mode 100644 index 00000000000..8933ca0bed9 Binary files /dev/null and b/addons/web/static/src/img/icons/save-document.png differ diff --git a/addons/web/static/src/img/iconset-b-remove.png b/addons/web/static/src/img/iconset-b-remove.png new file mode 100644 index 00000000000..497f03b4ceb Binary files /dev/null and b/addons/web/static/src/img/iconset-b-remove.png differ diff --git a/addons/web/static/src/js/boot.js b/addons/web/static/src/js/boot.js index 7440ae42dbc..14f50adb473 100644 --- a/addons/web/static/src/js/boot.js +++ b/addons/web/static/src/js/boot.js @@ -59,7 +59,7 @@ openerp.web = function(instance) { openerp.web.formats(instance); openerp.web.chrome(instance); openerp.web.data(instance); - var files = ["views","search","list","form","list_editable","web_mobile","view_tree","data_export","data_import","view_editor", 'embed']; + var files = ["views","search","list","form", "page","list_editable","web_mobile","view_tree","data_export","data_import","view_editor","embed"]; for(var i=0; i'); + this.create_view_widget = []; + _.each(view_widget, function(widget) { + var type_widget = new (self.property.get_any([widget.type])) (self.create_view_dialog, widget); + self.create_view_dialog.$element.find('table[id=create_view]').append('' + widget.string + ':' + type_widget.render()+''); + var value = null; + if (widget.value) { + value = widget.value; + type_widget.dirty = true; + } + type_widget.start(); + type_widget.set_value(value) + self.create_view_widget.push(type_widget); + }); + }, + do_save_view: function(values) { + def = $.Deferred(); + var field_dataset = new openerp.web.DataSetSearch(this, this.model, null, null); + var model_dataset = new openerp.web.DataSetSearch(this, 'ir.model', null, null); + var view_string = "", field_name = false, self = this; + field_dataset.call( 'fields_get', [], function(fields) { + _.each(['name', 'x_name'], function(value) { + if (_.include(_.keys(fields), value)) { + field_name = value; + return false; + } + }); + if (field_name) { + model_dataset.read_slice(['name','field_id'], {"domain": [['model','=',self.model]]}, function(records) { + if (records) {view_string = records[0].name;} + var arch = _.str.sprintf("\n<%s string='%s'>\n\t\n", values.view_type, view_string, field_name, values.view_type); + var vals = {'model': self.model, 'name': values.view_name, 'priority': values.priority, 'type': values.view_type, 'arch': arch}; + self.dataset.create(vals, function(suc) { + def.resolve(); + }); + }); } }); - this.view_edit_dialog.start().open(); - var action_manager = new openerp.web.ActionManager(this); - action_manager.appendTo(this.view_edit_dialog); - action_manager.do_action(action); + return def.promise(); }, - check_attr: function(xml, tag, level) { - var obj = {'child_id': [], 'id': this.xml_id++, 'level': level+1, 'att_list': [], 'name': ""}; - var render_name = "<" + tag; - obj.att_list.push(tag); - $(xml).each(function() { - _.each(this.attributes, function(attrs){ - if (tag != 'button') { - if (attrs.nodeName == "string" || attrs.nodeName == "name" || attrs.nodeName == "index") { - render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"' ; - } - } else { - if (attrs.nodeName == "name") { - render_name += ' ' + attrs.nodeName + '=' + '"' + attrs.nodeValue + '"'; - } - } - obj.att_list.push( [attrs.nodeName,attrs.nodeValue] ); - }); - render_name+= ">"; + on_valid_create_view: function(widgets) { + var msg = "
    "; + _.each(widgets, function(widget) { + if (widget.is_invalid) { + msg += "
  • " + widget.name + "
  • "; + } }); - obj.name = render_name; - return obj; + msg += "
"; + this.do_warn("The following fields are invalid :", msg); }, - save_object: function(val, parent_list, child_obj_list) { - var self = this; - var check_id = parent_list[0]; - var p_list = parent_list.slice(1); - if (val.child_id.length != 0) { - _.each(val.child_id, function(val, key) { - if (val.id == check_id) { - if (p_list.length!=0) { - self.save_object(val, p_list, child_obj_list); - } else { - val.child_id = child_obj_list; - return false; - } - } - }); - } else { - val.child_id = child_obj_list; + add_node_name : function(node) { + if(node.tagName.toLowerCase() == "button" || node.tagName.toLowerCase() == "field"){ + return (node.getAttribute('name'))? + _.str.sprintf( "<%s name='%s'>",node.tagName.toLowerCase(), node.getAttribute('name')): + _.str.sprintf( "<%s>",node.tagName.toLowerCase()); + }else if(node.tagName.toLowerCase() == "group"){ + return (node.getAttribute('string'))? + _.str.sprintf( "<%s>",node.getAttribute('string')): + _.str.sprintf( "<%s>",node.tagName.toLowerCase()); + }else{ + return (node.getAttribute('string'))? + _.str.sprintf( "<%s string='%s'>",node.tagName.toLowerCase(), node.getAttribute('string')): + _.str.sprintf( "<%s>",node.tagName.toLowerCase()); } }, - xml_node_create: function(xml, root, parent_list, parent_id, main_object){ + do_delete_view: function() { + if (confirm(_t("Do you really want to remove this view?"))) { + var controller = this.action_manager.inner_viewmanager.views[this.action_manager.inner_viewmanager.active_view].controller; + this.dataset.unlink([this.main_view_id]).then(function() { + controller.reload_content(); + this.main_view_id = self.parent.fields_view.view_id; + }); + } + }, + create_View_Node: function(node){ + ViewNode = { + 'level': ($(node).parents()).length + 1, + 'id': this.xml_element_id += 1, + 'att_list': [], + 'name': this.add_node_name(node), + 'child_id': [] + } + ViewNode.att_list.push(node.tagName.toLowerCase()); + _.each(node.attributes, function(att) { + ViewNode.att_list.push([att.nodeName, att.nodeValue]); + }); + return ViewNode; + }, + append_child_object: function(main_object, parent_id, child_obj_list) { + var self = this; + if (main_object.id == parent_id) { + main_object.child_id = child_obj_list; + return main_object; + } else { + _.each(main_object.child_id, function(child_object) { + self.append_child_object(child_object, parent_id, child_obj_list); + }); + } + }, + convert_arch_to_obj: function(xml_Node, main_object, parent_id) { var self = this; var child_obj_list = []; - var children_list = $(xml).filter(root).children(); - var parents = $(children_list[0]).parents().get(); - _.each(children_list, function (child_node) { - child_obj_list.push(self.check_attr(child_node,child_node.tagName.toLowerCase(),parents.length)); + _.each(xml_Node, function(element) { + child_obj_list.push(self.create_View_Node(element)); }); - if (children_list.length != 0) { - if (parents.length <= parent_list.length) { - parent_list.splice(parents.length - 1); + this.append_child_object(main_object, parent_id, child_obj_list); + var obj_xml_list = _.zip(xml_Node, child_obj_list); + _.each(obj_xml_list, function(node) { + var children = _.filter(node[0].childNodes, function(child) { + return child.nodeType == 1; + }); + if (children) { + self.convert_arch_to_obj(children, main_object, node[1].id); } - parent_list.push(parent_id); - self.save_object(main_object[0], parent_list.slice(1), child_obj_list); - } - for (var i = 0; i < children_list.length; i++) { - self.xml_node_create - (children_list[i], children_list[i].tagName.toLowerCase(), - parent_list, child_obj_list[i].id, main_object); - } + }); return main_object; }, parse_xml: function(arch, view_id) { - var root = $(arch).filter(":first")[0]; - var tag = root.tagName.toLowerCase(); - var obj ={'child_id':[],'id':this.xml_id++,'level':0,'att_list':[],'name':""}; - var root_object = this.check_attr(root,tag,0); - obj.child_id = this.xml_node_create(arch, tag, [], this.xml_id-1, [root_object], []) - return [obj]; + main_object = { + 'level': 0, + 'id': this.xml_element_id +=1, + 'att_list': [], + 'name': _.str.sprintf("", view_id), + 'child_id': [] + }; + var xml_arch = QWeb.load_xml(arch); + return [this.convert_arch_to_obj(xml_arch.childNodes, main_object, this.xml_element_id)]; }, - get_data: function() { + get_arch: function() { var self = this; var view_arch_list = []; - self.main_view_id =((this.view_edit_dialog.$element.find("input[name='radiogroup']:checked").parent()).parent()).attr('data-id'); - var ve_dataset = new openerp.web.DataSet(this, 'ir.ui.view'); - ve_dataset.read_ids([parseInt(self.main_view_id)], ['arch', 'type'], function (arch) { - one_object = self.parse_xml(arch[0].arch,self.main_view_id); - self.main_view_type = arch[0].type - view_arch_list.push({"view_id" : self.main_view_id, "arch" : arch[0].arch}); - dataset = new openerp.web.DataSetSearch(self, 'ir.ui.view', null, null); - dataset.read_slice([], {domain : [['inherit_id','=', parseInt(self.main_view_id)]]}, function (result) { - _.each(result, function(res) { - view_arch_list.push({"view_id":res.id,"arch":res.arch}); - self.inherit_view(one_object, res); - }); - return self.edit_view({"main_object": one_object, - "parent_child_id": self.parent_child_list(one_object, []), - "arch": view_arch_list}); - }); - }); - }, - parent_child_list : function(one_object, p_list) { - var self = this; - _.each(one_object , function(element){ - if(element.child_id.length != 0){ - p_list.push({"key":element.id,"value":_.pluck(element.child_id, 'id')}); - self.parent_child_list(element.child_id, p_list); - } - }); - return p_list; - }, - inherit_view : function(one_object, result) { - var self = this; - var root = $(result.arch).filter('*'); - var xml_list = []; - if (root[0].tagName.toLowerCase() == "data") { - xml_list = $(root[0]).children(); - } else { - xml_list.push(root[0]); - } - _.each(xml_list , function(xml){ - var parent_id; - var check_list = []; - var xpath_object = self.parse_xml(xml,result.id); - if (xml.tagName.toLowerCase() == "xpath" ) { - var part_expr = _.without($(xml).attr('expr').split("/"),""); - _.each(part_expr,function(part){ - check_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"),"")); + this.dataset.read_ids([parseInt(self.main_view_id)], ['arch', 'type'], function(arch) { + if (arch.length) { + var arch_object = self.parse_xml(arch[0].arch, self.main_view_id); + self.main_view_type = arch[0].type == 'tree'? 'list': arch[0].type; + view_arch_list.push({"view_id": self.main_view_id, "arch": arch[0].arch}); + self.dataset.read_slice([], {domain: [['inherit_id','=', parseInt(self.main_view_id)]]}, function(result) { + _.each(result, function(res) { + view_arch_list.push({"view_id": res.id, "arch": res.arch}); + self.inherit_view(arch_object, res); + }); + return self.edit_view({"main_object": arch_object, + "parent_child_id": self.parent_child_list(arch_object, []), + "arch": view_arch_list}); }); } else { - var temp = []; - _.each(xpath_object[0].child_id[0].att_list, function(list){ - if(!_.include(list, "position")){ - temp.push(list); - } - }); - check_list = [_.flatten(temp)]; + self.do_warn("Please select view in list :"); } - self.full_path_search(check_list ,one_object ,xpath_object); }); }, - full_path_search: function(check_list ,val ,xpath_object) { + parent_child_list : function(one_object, parent_list) { var self = this; - if(xpath_object.length!=0){ - var check = check_list[0]; - var obj; + _.each(one_object , function(element) { + if (element.child_id.length != 0) { + parent_list.push({"key": element.id, "value": _.pluck(element.child_id, 'id')}); + self.parent_child_list(element.child_id, parent_list); + } + }); + return parent_list; + }, + inherit_view : function(arch_object, result) { + var self = this, xml_list = [], xml_arch = QWeb.load_xml(result.arch); + if (xml_arch.childNodes[0].tagName == "data") { + xml_list = _.filter(xml_arch.childNodes[0].childNodes, function(child) { + return child.nodeType == 1; + }); + } else { + xml_list.push( xml_arch.childNodes[0]); + } + _.each(xml_list, function(xml) { + var expr_to_list = [], xpath_arch_object = self.parse_xml(QWeb.tools.xml_node_to_string(xml), result.id); + if (xml.tagName == "xpath") { + var part_expr = _.without(xml.getAttribute('expr').split("/"), ""); + _.each(part_expr, function(part) { + expr_to_list.push(_.without($.trim(part.replace(/[^a-zA-Z 0-9 _]+/g,'!')).split("!"), "")); + }); + } else { + var temp = _.reject(xpath_arch_object[0].child_id[0].att_list, function(list) { + return list instanceof Array? _.include(list, "position"): false; + }); + expr_to_list = [_.flatten(temp)]; + } + self.inherit_apply(expr_to_list, arch_object ,xpath_arch_object); + }); + }, + inherit_apply: function(expr_list ,arch_object ,xpath_arch_object) { + var self = this; + if (xpath_arch_object.length) { + var check = expr_list[0], obj = false; switch (check.length) { case 2: - if(parseInt(check[1])){ - var list_1 = _.select(val,function(element){ - var main_list = _.flatten(element.att_list); - return _.include(main_list, check[0]); + if (parseInt(check[1])) { + //for field[3] + var temp_list = _.select(arch_object, function(element) { + return _.include(_.flatten(element.att_list), check[0]); }); - obj = val[_.indexOf(val,list_1[parseInt(check[1])-1])]; + obj = arch_object[_.indexOf(arch_object, temp_list[parseInt(check[1]) - 1])]; } else { - obj = _.detect(val, function(element){ - var main_list = _.flatten(element.att_list); - return _.include(main_list, check[0]); + //for notebook[last()] + obj = _.detect(arch_object, function(element) { + return _.include(_.flatten(element.att_list), check[0]); }); } break; case 3: - obj = _.detect(val,function(element){ - var main_list = _.flatten(element.att_list); - check = _.uniq(check); - var insert = _.intersection(main_list,check); - if(insert.length == check.length ){return element;} + //for field[@name='type'] + obj = _.detect(arch_object, function(element){ + if ((_.intersection(_.flatten(element.att_list), _.uniq(check))).length == check.length) { + return element; + } }); break; case 1: - var list_1 = _.select(val,function(element){ - var main_list = _.flatten(element.att_list); - return _.include(main_list, check[0]); + //for /form/notebook + var temp_list = _.select(arch_object, function(element) { + return _.include(_.flatten(element.att_list), check[0]); }); - if(list_1.length != 0){ - (check_list.length == 1)? obj = list_1[0] : check_list.shift(); + if (temp_list.length != 0) { + expr_list.length == 1 ? obj = temp_list[0] : expr_list.shift(); } break; } - if(obj) { - check_list.shift(); - if (check_list.length !=0){ - self.full_path_search(check_list ,obj.child_id ,xpath_object); + if (obj) { + expr_list.shift(); + if (expr_list.length) { + self.inherit_apply(expr_list, obj.child_id, xpath_arch_object); } else { - var level = obj.level+1; - self.increase_level(xpath_object[0], level) - obj.child_id.push(xpath_object[0]); - xpath_object.pop(); - return; + self.increase_level(xpath_arch_object[0], obj.level + 1); + obj.child_id.push(xpath_arch_object[0]); + xpath_arch_object.pop(); } - } - else { - _.each(val,function(element){ - self.full_path_search(check_list ,element.child_id ,xpath_object); + } else { + _.each(arch_object, function(element) { + self.inherit_apply(expr_list, element.child_id, xpath_arch_object); }); } } @@ -253,31 +357,40 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ self.increase_level(val, level + 1); }); }, + do_select_row: function(row_id) { + this.edit_xml_dialog.$element.find("tr[id^='viewedit-']").removeClass('ui-selected'); + this.edit_xml_dialog.$element.find("tr[id=viewedit-" + row_id + "]").addClass('ui-selected'); + }, + do_parent_img_hide_show: function(img) { + if ($(img).attr('src') == '/web/static/src/img/collapse.gif') { + $(img).attr('src', '/web/static/src/img/expand.gif'); + this.on_expand(img); + } else { + $(img).attr('src', '/web/static/src/img/collapse.gif'); + this.on_collapse(img); + } + }, edit_view: function(one_object) { var self = this; - this.edit_xml_dialog = new openerp.web.Dialog(this,{ + this.one_object = one_object; + this.edit_xml_dialog = new openerp.web.Dialog(this, { modal: true, - title: 'View Editor', + title: _.str.sprintf("View Editor %d - %s", self.main_view_id, self.model), width: 750, height: 500, buttons: { - "Inherited View": function(){ - //todo - }, - "Preview": function(){ + "Preview": function() { var action = { - context:self.session.user_context, - res_model : self.model, - views : [[self.main_view_id, self.main_view_type]], + context: self.session.user_context, + res_model: self.model, + views: [[self.main_view_id, self.main_view_type]], type: 'ir.actions.act_window', target: "new", flags: { sidebar: false, views_switcher: false, - action_buttons:false, - search_view:false, - pager:false - } + action_buttons: false, + }, }; var action_manager = new openerp.web.ActionManager(self); action_manager.do_action(action); @@ -286,231 +399,766 @@ openerp.web.ViewEditor = openerp.web.Widget.extend({ self.edit_xml_dialog.close(); } } + }).start().open(); + var no_property_att = []; + _.each(_PROPERTIES, function(val, key) { + if (! val.length) no_property_att.push(key); }); - this.edit_xml_dialog.start().open(); - this.edit_xml_dialog.$element.html(QWeb.render('view_editor', { - 'data': one_object['main_object'] - })); + this.edit_xml_dialog.$element.html(QWeb.render('view_editor', {'data': one_object['main_object'], 'no_properties': no_property_att})); this.edit_xml_dialog.$element.find("tr[id^='viewedit-']").click(function() { - self.edit_xml_dialog.$element.find("tr[id^='viewedit-']").removeClass('ui-selected'); - $(this).addClass('ui-selected'); + self.do_select_row(this.id.split('-')[1]); }); this.edit_xml_dialog.$element.find("img[id^='parentimg-']").click(function() { - if ($(this).attr('src') == '/web/static/src/img/collapse.gif') { - $(this).attr('src', '/web/static/src/img/expand.gif'); - self.on_expand(this); - } else { - $(this).attr('src', '/web/static/src/img/collapse.gif'); - var id = this.id.split('-')[1]; - self.on_collapse(this,one_object['parent_child_id'], one_object['main_object']); - } + self.do_parent_img_hide_show(this); }); this.edit_xml_dialog.$element.find("img[id^='side-']").click(function() { - var side = $(this).closest("tr[id^='viewedit-']") - var id_tr = (side.attr('id')).split('-')[1]; - var img = side.find("img[id='parentimg-"+id_tr+"']").attr('src'); ; - var level = parseInt(side.attr('level')); - var list_shift =[]; - var last_tr; - var cur_tr = side; - list_shift.push(side); - var next_tr; - var ls = side; - var view_id; - var view_xml_id; - while(1){ - ls = ls.prev(); - if((self.edit_xml_dialog.$element.find(ls).find('a').text()).search("view_id") != -1 - && parseInt(ls.attr('level')) < level){ - view_id = parseInt(($(ls).find('a').text()).replace(/[^0-9]+/g,'')); - view_xml_id = (ls.attr('id')).split('-')[1]; + self.on_select_img(this); + }); + }, + on_select_img: function(element_img) { + var self = this; + var side = $(element_img).closest("tr[id^='viewedit-']"); + this.one_object.clicked_tr_id = parseInt((side.attr('id')).split('-')[1]); + this.one_object.clicked_tr_level = parseInt(side.attr('level')); + var img = side.find("img[id='parentimg-" + this.one_object.clicked_tr_id + "']").attr('src'); + var view_id = 0, view_xml_id = 0, view_find = side; + //for view id finding + var min_level = this.one_object.clicked_tr_id; + if (($(side).find('a').text()).search("view_id") != -1) { + view_id = parseInt(($(view_find).find('a').text()).replace(/[^0-9]+/g, '')); + view_xml_id = (view_find.attr('id')).split('-')[1]; + this.one_object.clicked_tr_id += 1; + this.one_object.clicked_tr_level += 1; + }else{ + while (1) { + view_find = view_find.prev(); + if (view_find.length == 0 || + (self.edit_xml_dialog.$element.find(view_find).find('a').text()).search("view_id") != -1 + && parseInt(view_find.attr('level')) < min_level ) { + view_id = parseInt(($(view_find).find('a').text()).replace(/[^0-9]+/g, '')); + view_xml_id = parseInt((view_find.attr('id')).split('-')[1]); break; } + if (view_find.attr('level') < min_level) { + min_level = parseInt(view_find.attr('level')); + } } - switch (this.id) { - case "side-add": - break; - case "side-remove": - break; - case "side-edit": - break; - case "side-up": - while (1) { - var prev_tr = cur_tr.prev(); - if(level >= parseInt(prev_tr.attr('level')) || prev_tr.length == 0) { - last_tr = prev_tr; - break; - } - cur_tr = prev_tr; - } - if (img) { - while (1) { - next_tr = side.next(); - if ( parseInt(next_tr.attr('level')) <= level || next_tr.length == 0) { - break; - } else { - list_shift.push(next_tr); - side = next_tr; - } - } - } - if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == level && - (self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") == -1) { - _.each(list_shift, function(rec) { - $(last_tr).before(rec); - }); - self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level, "up"); - } + } + this.one_object.clicked_tr_view = [view_id, view_xml_id]; + switch (element_img.id) { + case "side-add": + self.do_node_add(side); + break; + case "side-remove": + if (confirm(_t("Do you really want to remove this node?"))) { + self.do_save_update_arch("remove_node"); + } + break; + case "side-edit": + self.do_node_edit(side); + break; + case "side-up": + self.do_node_up(side, img); break; case "side-down": - if (img) { - while (1) { - next_tr = cur_tr.next(); - if ( parseInt(next_tr.attr('level')) <= level || next_tr.length == 0) { - last_tr = next_tr; - break; - } else { - list_shift.push(next_tr); - cur_tr = next_tr; - } - } - } - else { - last_tr = cur_tr.next(); - } - if((self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") != -1){ - return; - } - if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == level) { - var last_tr_id = (last_tr.attr('id')).split('-')[1]; - img = last_tr.find("img[id='parentimg-" + last_tr_id + "']").attr('src'); - if (img) { - self.edit_xml_dialog.$element.find("img[id='parentimg-" + last_tr_id + "']"). - attr('src', '/web/static/src/img/expand.gif'); - while (1) { - var next_tr = last_tr.next(); - if (next_tr.attr('level') <= level || next_tr.length == 0) break; - next_tr.hide(); - last_tr = next_tr; - } - } - list_shift.reverse(); - _.each(list_shift, function(rec) { - $(last_tr).after(rec); - }); - self.save_move_arch(one_object, view_id, view_xml_id, id_tr, level, "down"); - } + self.do_node_down(side, img); break; - } + } + }, + do_node_add: function(side){ + var self = this; + var tr = $(side).find('a').text(); + var parent_tr = ($(side).prevAll("tr[level=" + String(this.one_object.clicked_tr_level - 1) + "]"))[0]; + var field_dataset = new openerp.web.DataSetSearch(this, this.model, null, null); + parent_tr = $(parent_tr).find('a').text(); + field_dataset.call( 'fields_get', [], function(result) { + var fields = _.keys(result); + fields.push(" "),fields.sort(); + var property_to_check = []; + _.each([tr, parent_tr],function(element) { + property_to_check.push( + _.detect(_.keys(_CHILDREN),function(res){ + return _.str.include(element, res); + })); + }); + self.on_add_node(property_to_check, fields); }); }, - save_move_arch: function(one_object, view_id, view_xml_id, id_tr, level, move_direct){ + do_node_edit: function(side) { var self = this; - var arch = _.detect(one_object['arch'],function(element){ - return element.view_id == view_id; - }); - var obj = self.get_view_object(view_xml_id, one_object['main_object'], []); - if(($(arch.arch).filter("data")).length != 0 && view_xml_id != 0){ + var result = self.get_object_by_id(this.one_object.clicked_tr_id, this.one_object['main_object'], []); + if (result.length && result[0] && result[0].att_list) { + var properties = _PROPERTIES[result[0].att_list[0]]; + self.on_edit_node(properties); + } + }, + do_node_down: function(cur_tr, img) { + var self = this, next_tr, last_tr, tr_to_move = []; + tr_to_move.push(cur_tr); + if (img) { + while (1) { + next_tr = cur_tr.next(); + if ( parseInt(next_tr.attr('level')) <= this.one_object.clicked_tr_level || next_tr.length == 0) { + last_tr = next_tr; + break; + } else { + tr_to_move.push(next_tr); + cur_tr = next_tr; + } + } + } else { + last_tr = cur_tr.next(); + } + if ((self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") != -1) { + return false; + } + if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == this.one_object.clicked_tr_level) { + var last_tr_id = (last_tr.attr('id')).split('-')[1]; + img = last_tr.find("img[id='parentimg-" + last_tr_id + "']").attr('src'); + if (img) { + self.edit_xml_dialog.$element.find("img[id='parentimg-" + last_tr_id + "']"). + attr('src', '/web/static/src/img/expand.gif'); + while (1) { + var next_tr = last_tr.next(); + if (next_tr.attr('level') <= this.one_object.clicked_tr_level || next_tr.length == 0) break; + next_tr.hide(); + last_tr = next_tr; + } + } + tr_to_move.reverse(); + _.each(tr_to_move, function(rec) { + $(last_tr).after(rec); + }); + self.do_save_update_arch("down"); + } + }, + do_node_up: function(cur_tr, img) { + var self = this, side = cur_tr, tr_to_move = []; + tr_to_move.push(side); + while (1) { + var prev_tr = cur_tr.prev(); + if (this.one_object.clicked_tr_level >= parseInt(prev_tr.attr('level')) || prev_tr.length == 0) { + last_tr = prev_tr; + break; + } + cur_tr = prev_tr; + } + if (img) { + self.edit_xml_dialog.$element.find("img[id='parentimg-" + this.one_object.clicked_tr_id + "']"). + attr('src', '/web/static/src/img/expand.gif'); + while (1) { + next_tr = side.next(); + if (parseInt(next_tr.attr('level')) <= this.one_object.clicked_tr_level || next_tr.length == 0) { + break; + } else { + next_tr.hide(); + tr_to_move.push(next_tr); + side = next_tr; + } + } + } + if (last_tr.length != 0 && parseInt(last_tr.attr('level')) == this.one_object.clicked_tr_level && + (self.edit_xml_dialog.$element.find(last_tr).find('a').text()).search("view_id") == -1) { + _.each(tr_to_move, function(rec) { + $(last_tr).before(rec); + }); + self.do_save_update_arch("up"); + } + }, + do_save_update_arch: function(move_direct, update_values) { + var self = this; + var arch = _.detect(self.one_object['arch'], function(element) + {return element.view_id == self.one_object.clicked_tr_view[0]}); + var obj = self.get_object_by_id(this.one_object.clicked_tr_view[1],this.one_object['main_object'], []); + //for finding xpath tag from inherit view + var xml_arch = QWeb.load_xml(arch.arch); + if (xml_arch.childNodes[0].tagName == "data") { var check_list = _.flatten(obj[0].child_id[0].att_list); - arch.arch = _.detect($(arch.arch).children(), function(xml_child){ - var temp_obj = self.check_attr(xml_child, xml_child.tagName.toLowerCase()); - var main_list = _.flatten(temp_obj.att_list); - check_list = _.uniq(check_list); - var insert = _.intersection(main_list,check_list); - if(insert.length == check_list.length ){return xml_child;} + var children = _.filter(xml_arch.childNodes[0].childNodes, function (child) { + return child.nodeType == 1; + }); + arch.arch = _.detect(children, function(xml_child) { + var temp_obj = self.create_View_Node(xml_child), + insert = _.intersection(_.flatten(temp_obj.att_list),_.uniq(check_list)); + if (insert.length == check_list.length ) {return xml_child;} }); } - return self.get_node(arch.arch, obj[0].child_id[0], parseInt(id_tr), [], parseInt(level), - parseInt(view_id), arch, move_direct); + arch_to_pass = _.filter($(arch.arch), function (child) { + return child.nodeType == 1; + }); + return self.do_save_xml(arch_to_pass[0], obj[0].child_id[0],[], move_direct, update_values,arch); }, - - get_view_object: function(view_xml_id, one_object,result){ + get_object_by_id: function(id, one_object, result) { var self = this; - if(result.length==0){ - var check = _.detect(one_object , function(obj){ - return view_xml_id==obj.id; + if (result.length == 0 ) { + var check = _.detect(one_object , function(obj) { + return id == obj.id; }); - if(check){result.push(check);}; - _.each(one_object, function(obj){ - self.get_view_object(view_xml_id, obj.child_id, result); + if (check) {result.push(check);}; + _.each(one_object, function(obj) { + self.get_object_by_id(id,obj.child_id, result); }); } return result; }, - get_node: function(arch1, obj, id, child_list, level, view_id, arch, move_direct){ + create_clone: function(clone, new_node_obj, position){ var self = this; - var children_list = $(arch1).children(); - var list_obj_xml = _.zip(children_list,obj.child_id); - if (id) { - if (obj.id == id) { - var id; - var parent = $(arch1).parents(); - var index = _.indexOf(child_list, obj) - var re_insert_obj = child_list.splice(index, 1); + clone.find('a').text(new_node_obj.name); + ($(clone.find('a').parent()).siblings('td')).css( "padding-left", 20 * new_node_obj.level); + clone.attr("id", "viewedit-" + new_node_obj.id); + clone.attr("level", new_node_obj.level); + clone.find("img[id^='parentimg-']").remove(); + clone.bind("click",function(){ + self.do_select_row(this.id.split('-')[1]); + }); + clone.find("img[id^='side-']").click(function() { + self.on_select_img(this); + }); + return clone; + }, + do_save_xml: function(arch1, obj, child_list, move_direct, update_values, arch){ + var self = this, children_list = $(arch1).children(), list_obj_xml = _.zip(children_list, obj.child_id); + if (this.one_object.clicked_tr_id) { + if (obj.id == this.one_object.clicked_tr_id) { + var parent = false, index = _.indexOf(child_list, obj); if (move_direct == "down") { var next = $(arch1).next(); $(next).after(arch1); + var re_insert_obj = child_list.splice(index, 1); child_list.splice(index+1, 0, re_insert_obj[0]); - } else { + parent = $(arch1).parents(); + } else if (move_direct == "up") { var prev = $(arch1).prev(); $(prev).before(arch1); + var re_insert_obj = child_list.splice(index, 1); child_list.splice(index-1, 0, re_insert_obj[0]); + parent = $(arch1).parents(); + } else if (move_direct == "update_node") { + _.each(update_values, function(val){ + if (val[1]) $(arch1)[0].setAttribute(val[0], val[1]); + else $(arch1)[0].removeAttribute(val[0]); + }); + var new_obj = self.create_View_Node(arch1); + new_obj.id = obj.id,new_obj.child_id = obj.child_id; + self.edit_xml_dialog.$element. + find("tr[id='viewedit-"+this.one_object.clicked_tr_id+"']"). + find('a').text(new_obj.name); + child_list.splice(index, 1, new_obj); + parent = $(arch1).parents(); + } else if(move_direct == "add_node") { + var tr_click = self.edit_xml_dialog.$element.find("tr[id='viewedit-"+self.one_object.clicked_tr_id+"']"), + temp_xml = QWeb.load_xml(update_values[0]), + object_xml = self.create_View_Node(temp_xml.childNodes[0]); + (update_values[1] == "Inside")? object_xml.level = obj.level + 1:object_xml.level = obj.level; + var clone = self.create_clone(tr_click.clone(),object_xml), + after_append = _.detect(self.one_object['parent_child_id'],function(ele){ + return self.one_object.clicked_tr_id == ele.key; + }); + after_append = (after_append)?_.last(after_append.value):self.one_object.clicked_tr_id; + switch (update_values[1]) { + case "After": + self.edit_xml_dialog.$element. + find("tr[id='viewedit-"+after_append+"']").after(clone); + $(arch1).after(update_values[0]); + child_list.splice(index + 1, 0, object_xml); + break; + case "Before": + tr_click.before(clone); + $(arch1).before(update_values[0]); + child_list.splice(index - 1, 0, object_xml); + break; + case "Inside": + if (tr_click.find("img[id^='parentimg-']").length == 0) { + ($(tr_click.find('a').parent()).siblings('td')) + .append($('').attr('src', '/web/static/src/img/collapse.gif'). + attr('id','parentimg-'+ self.one_object.clicked_tr_id).click(function(){ + self.do_parent_img_hide_show(this); + })); + } + $(arch1).append(update_values[0]); + self.edit_xml_dialog.$element. + find("tr[id='viewedit-"+after_append+"']").after(clone); + obj.child_id.push(object_xml); + break; + } + self.edit_xml_dialog.$element. + find("tr[id='viewedit-" + object_xml.id + "']").removeClass('ui-selected'); + parent = $(arch1).parents(); + } else if (move_direct == "remove_node") { + parent = $(arch1).parents(); + if (parent.length == 0 || (parent[0].tagName.toLowerCase() == "data")) { + self.one_object.clicked_tr_id = self.one_object.clicked_tr_id -1; + self.one_object.clicked_tr_level = self.one_object.clicked_tr_level - 1; + (parent.length == 0)?parent.push("remove_view"):false; + } + $(arch1).remove(); + child_list.splice(index,1); + var cur_tr = self.edit_xml_dialog.$element. + find("tr[id='viewedit-" + self.one_object.clicked_tr_id + "']"); + _.each(self.get_list_tr(cur_tr,self.one_object.clicked_tr_level), function(tr_element){ + tr_element.remove(); + }); + cur_tr.remove(); + var parent_img = _.detect(self.one_object['parent_child_id'],function(element){ + return _.include(element.value, self.one_object.clicked_tr_id); + }); + if(parent_img.value.length == 1){ + self.edit_xml_dialog.$element. + find("tr[id='viewedit-"+parent_img.key+"']"). + find("img[id^='parentimg-']").remove(); + } + self.one_object['parent_child_id'] = self.parent_child_list(self.one_object['main_object'],[]); } - parent = parent[parent.length-1]; - var convert_to_utf = self.xml2Str(parent); - if (convert_to_utf) { + var convert_to_utf = (parent.length != 0)? parent[parent.length-1]: arch1; + if (convert_to_utf != "remove_view") { + convert_to_utf = QWeb.tools.xml_node_to_string(convert_to_utf); convert_to_utf = convert_to_utf.replace('xmlns="http://www.w3.org/1999/xhtml"', ""); convert_to_utf = '' + convert_to_utf; arch.arch = convert_to_utf; - dataset = new openerp.web.DataSet(this, 'ir.ui.view'); - dataset.write(parseInt(view_id),{"arch":convert_to_utf}, function(r) { - }); + this.dataset.write(this.one_object.clicked_tr_view[0] ,{"arch":convert_to_utf}, function(r) {}); + } else { + this.dataset.unlink([this.one_object.clicked_tr_view[0]],function(res) {}); + } + if(move_direct == "add_node"){ + self.add_node_dialog.close(); + self.on_select_img(clone.find("img[id='side-edit']")[0]); + self.one_object['parent_child_id'] = self.parent_child_list(self.one_object['main_object'],[]); } } - if (obj.level <= level) { + if (obj.level <= this.one_object.clicked_tr_level) { _.each(list_obj_xml, function(child_node) { - self.get_node(child_node[0], child_node[1], id, obj.child_id, level, view_id, arch, move_direct); + self.do_save_xml(child_node[0], child_node[1], obj.child_id, move_direct, update_values, arch); }); } } }, - xml2Str: function(xmlNode) { - try { - return (new XMLSerializer()).serializeToString(xmlNode); - } - catch (e) { - try { - return xmlNode.xml; - } - catch (e) { - return false; - } - } - - }, on_expand: function(expand_img){ var level = parseInt($(expand_img).closest("tr[id^='viewedit-']").attr('level')); var cur_tr = $(expand_img).closest("tr[id^='viewedit-']"); + _.each(this.get_list_tr(cur_tr,level), function(tr_element){ + tr_element.hide(); + }); + }, + get_list_tr: function(cur_tr,level){ + tr_list = []; while (1) { var nxt_tr = cur_tr.next(); - if (parseInt(nxt_tr.attr('level')) > level){ + if (parseInt(nxt_tr.attr('level')) > level) { cur_tr = nxt_tr; - nxt_tr.hide(); - } else return nxt_tr; + tr_list.push(nxt_tr); + } else return tr_list; } }, - on_collapse: function(collapse_img, parent_child_id, id, main_object) { - var self = this; - var id = collapse_img.id.split('-')[1]; - var datas = _.detect(parent_child_id,function(res) { + on_collapse: function(collapse_img) { + var self = this, id = collapse_img.id.split('-')[1]; + var datas = _.detect(self.one_object['parent_child_id'] , function(res) { return res.key == id; }); - _.each(datas.value, function(rec) { - var tr = self.edit_xml_dialog.$element.find("tr[id='viewedit-"+rec+"']"); - tr.find("img[id='parentimg-"+rec+"']").attr('src','/web/static/src/img/expand.gif'); + _.each(datas.value, function (rec) { + var tr = self.edit_xml_dialog.$element.find("tr[id='viewedit-" + rec + "']"); + tr.find("img[id='parentimg-" + rec + "']").attr('src', '/web/static/src/img/expand.gif'); tr.show(); }); + }, + on_edit_node: function(properties){ + var self = this; + this.edit_node_dialog = new openerp.web.Dialog(this,{ + modal: true, + title: 'Properties', + width: 500, + height: 400, + buttons: { + "Update": function(){ + var warn = false, update_values = []; + _.each(self.edit_widget, function(widget) { + if (widget.is_invalid) { + warn = true; + return false; + }; + if (widget.dirty && !widget.is_invalid) { + update_values.push([widget.name, widget.get_value()]); + } + }); + if (warn) { + self.on_valid_create_view(self.edit_widget); + } else { + self.do_save_update_arch("update_node", update_values); + self.edit_node_dialog.close(); + } + }, + "Cancel": function(){ + self.edit_node_dialog.close(); + } + } + }); + this.edit_node_dialog.start().open(); + var _PROPERTIES_ATTRIBUTES = { + 'name' : {'name':'name', 'string': 'Name', 'type': 'char'}, + 'string' : {'name':'string', 'string': 'String', 'type': 'char'}, + 'required' : {'name':'required', 'string': 'Required', 'type': 'boolean'}, + 'readonly' : {'name':'readonly', 'string': 'Readonly', 'type': 'boolean'}, + 'domain' : {'name':'domain', 'string': 'Domain', 'type': 'char'}, + 'context' : {'name':'context', 'string': 'Context', 'type': 'char'}, + 'limit' : {'name':'limit', 'string': 'Limit', 'type': 'float'}, + 'min_rows' : {'name':'min_rows', 'string': 'Minimum rows', 'type': 'float'}, + 'date_start' : {'name':'date_start', 'string': 'Start date', 'type': 'char'}, + 'date_delay' : {'name':'date_delay', 'string': 'Delay date', 'type': 'char'}, + 'day_length' : {'name':'day_length', 'string': 'Day length', 'type': 'char'}, + 'mode' : {'name':'mode', 'string': 'Mode', 'type': 'char'}, + 'align' : {'name':'align', 'string': 'Alignment ', 'type': 'selection', 'selection': [['', ''], ['0.0', 'Left'], ['0.5', 'Center'], ['1.0', 'Right']]}, + 'icon' : {'name':'icon', 'string': 'Icon', 'type': 'selection', 'selection': _ICONS}, + 'type' : {'name':'type', 'string': 'Type', 'type': 'selection', 'selection': [['', ''], ['action', 'Action'], ['object', 'Object'], ['workflow', 'Workflow'], ['server_action', 'Server Action']]}, + 'special' : {'name':'special', 'string': 'Special', 'type': 'selection', 'selection': [['',''],['save', 'Save Button'], ['cancel', 'Cancel Button'], ['open', 'Open Button']]}, + 'target' : {'name':'target', 'string': 'Target', 'type': 'selection', 'selection': [['', ''], ['new', 'New Window']]}, + 'confirm' : {'name':'confirm', 'string': 'Confirm', 'type': 'char'}, + 'style' : {'name':'style', 'string': 'Style', 'type': 'selection', 'selection':[["",""],["1", "1"],["1-1", "1-1"],["1-2", "1-2"],["2-1", "2-1"],["1-1-1", "1-1-1"]]}, + 'filename' : {'name':'filename', 'string': 'File Name', 'type': 'char'}, + 'width' : {'name':'width', 'string': 'Width', 'type': 'float'}, + 'height' : {'name':'height', 'string': 'Height', 'type': 'float'}, + 'attrs' : {'name':'attrs', 'string': 'Attrs', 'type': 'char'}, + 'col' : {'name':'col', 'string': 'col', 'type': 'float'}, + 'link' : {'name':'link', 'string': 'Link', 'type': 'char'}, + 'position' : {'name':'position', 'string': 'Position', 'type': 'selection', 'selection': [['',''],['after', 'After'],['before', 'Before'],['inside', 'Inside'],['replace', 'Replace']]}, + 'states' : {'name':'states', 'string': 'states', 'type': 'char'}, + 'eval' : {'name':'eval', 'string': 'Eval', 'type': 'char'}, + 'ref' : {'name':'ref', 'string': 'Ref', 'type': 'char'}, + 'on_change' : {'name':'on_change', 'string': 'On change', 'type': 'char'}, + 'nolabel' : {'name':'nolabel', 'string': 'No label', 'type': 'boolean'}, + 'completion' : {'name':'completion', 'string': 'Completion', 'type': 'boolean'}, + 'colspan' : {'name':'colspan', 'string': 'Colspan', 'type': 'float'}, + 'widget' : {'name':'widget', 'string': 'widget', 'type': 'selection'}, + 'colors' : {'name':'colors', 'string': 'Colors', 'type': 'char'}, + 'editable' : {'name':'editable', 'string': 'Editable', 'type': 'selection', 'selection': [["",""],["top","Top"],["bottom", "Bottom"]]}, + 'groups' : {'name':'groups', 'string': 'Groups', 'type': 'seleciton_multi'}, + }; + var arch_val = self.get_object_by_id(this.one_object.clicked_tr_id,this.one_object['main_object'], []); + this.edit_node_dialog.$element.append('
'); + this.edit_widget = []; + self.ready = $.when(self.on_groups(properties)).then(function () { + _PROPERTIES_ATTRIBUTES['groups']['selection'] = self.groups; + var values = _.keys( openerp.web.form.widgets.map); + values.push(''); + values.sort(); + _PROPERTIES_ATTRIBUTES['widget']['selection'] = values; + var widgets = _.filter(_PROPERTIES_ATTRIBUTES, function(property){ return _.include(properties, property.name)}) + _.each(widgets, function(widget) { + var type_widget = new (self.property.get_any([widget.type])) (self.edit_node_dialog, widget); + var value = _.detect(arch_val[0]['att_list'],function(res) { + return res instanceof Array? _.include(res, widget.name): false; + }); + value = value instanceof Array ? value[1] : value; + self.edit_node_dialog.$element.find('table[id=rec_table]').append('' + widget.string + ':' + type_widget.render() + ''); + type_widget.start(); + type_widget.set_value(value); + self.edit_widget.push(type_widget); + }); + }); + }, + //for getting groups + on_groups: function(properties){ + var self = this, + def = $.Deferred(); + if (!_.include(properties, 'groups')) { + self.groups = false; + def.resolve(); + } + var group_ids = [], group_names = {}, groups = []; + var res_groups = new openerp.web.DataSetSearch(this,'res.groups', null, null), + model_data = new openerp.web.DataSetSearch(self,'ir.model.data', null, null); + res_groups + .read_slice([], {}) + .done(function(res_grp) { + _.each(res_grp,function(res){ + var key = res.id; + group_names[key]=res.name; + group_ids.push(res.id); + }); + model_data + .read_slice([],{domain:[['res_id', 'in', group_ids],['model','=','res.groups']]}) + .done(function(model_grp) { + _.each(model_grp, function(res_group) { + groups.push([res_group.module + "." + res_group.name,group_names[res_group.res_id]]); + }); + self.groups = groups; + def.resolve(); + }); + }) + return def.promise(); + }, + on_add_node: function(properties, fields){ + var self = this; + var render_list = [{'name': 'node_type','selection': _.keys(_CHILDREN).sort(), 'value': 'field', 'string': 'Node Type','type': 'selection'}, + {'name': 'field_value','selection': fields, 'value': false, 'string': '','type': 'selection'}, + {'name': 'position','selection': ['After','Before','Inside'], 'value': false, 'string': 'Position','type': 'selection'}]; + this.add_widget = []; + this.add_node_dialog = new openerp.web.Dialog(this,{ + modal: true, + title: 'Properties', + width: 450, + height: 190, + buttons: { + "Update": function(){ + var check_add_node = true, values = {}; + _.each(self.add_widget, function(widget) { + values[widget.name] = widget.get_value() || false; + }); + (values.position == "Inside")? + check_add_node =(_.include(_CHILDREN[properties[0]],values.node_type))?true:false: + check_add_node =(_.include(_CHILDREN[properties[1]],values.node_type))?true:false; + if(values.node_type == "field" && check_add_node ) + {check_add_node = (values.field_value != " ")?true:false; + } + if(check_add_node){ + var tag = (values.node_type == "field")? + _.str.sprintf("<%s name='%s'> ",values.node_type,values.field_value,values.node_type): + _.str.sprintf("<%s> ",values.node_type,values.node_type); + self.do_save_update_arch("add_node", [tag, values.position]); + }else{alert("Can't Update View");} + }, + "Cancel": function(){ + self.add_node_dialog.close(); + } + } + }).start().open(); + this.add_node_dialog.$element.append('
'); + var table_selector = self.add_node_dialog.$element.find('table[id=rec_table] tbody'); + _.each(render_list, function(node) { + type_widget = new (self.property.get_any([node.type])) (self.add_node_dialog, node); + if (node.name == "position") { + table_selector.append('' + node.string + '' + type_widget.render() + ''); + } else { + table_selector.append('' + node.string + '' + type_widget.render() ); + if (node.name == "field_value") { + table_selector.append(' '); + } + } + type_widget.start(); + type_widget.set_value(node.value); + self.add_widget.push(type_widget); + }); + table_selector.find("td[id^=]").attr("width","100px"); + self.add_node_dialog.$element.find('#new_field').click(function() { + model_data = new openerp.web.DataSetSearch(self,'ir.model', null, null); + model_data.read_slice([], {domain: [['model','=', self.model]]}, function(result) { + self.render_new_field(result[0].id); + }); + }); + }, + render_new_field :function(id){ + var self = this; + var action = { + context: {'default_model_id': id, 'manual':true}, + res_model: "ir.model.fields", + views: [[false, 'form']], + type: 'ir.actions.act_window', + target: "new", + flags: { + action_buttons: true, + } + } + var action_manager = new openerp.web.ActionManager(self); + $.when(action_manager.do_action(action)).then(function() { + var controller = action_manager.dialog_viewmanager.views['form'].controller; + // TODO NIV: use page view + controller.do_set_readonly.add_last(function(){ + action_manager.stop(); + new_fields_name = new openerp.web.DataSetSearch(self,'ir.model.fields', null, null); + new_fields_name.read_ids([controller.datarecord.id], ['name'], function(result) { + self.add_node_dialog.$element.find('select[id=field_value]').append($("").attr("value", result[0].name).text(result[0].name)); + _.detect(self.add_widget,function(widget){ + widget.name == "field_value"? widget.selection.push(result[0].name): false; + }); + }); + }); + }); } +}); +openerp.web.ViewEditor.Field = openerp.web.Class.extend({ + init: function(view, widget) { + this.$element = view.$element; + this.dirty = false; + this.name = widget.name; + this.selection = widget.selection || []; + this.required = widget.required || false; + this.string = widget.string || ""; + this.type = widget.type; + this.is_invalid = false; + }, + start: function () { + this.update_dom(); + }, + update_dom: function() { + this.$element.find("td[id=" + this.name + "]").toggleClass('invalid', this.is_invalid); + this.$element.find("td[id=" + this.name + "]").toggleClass('required', this.required); + }, + on_ui_change: function() { + this.validate(); + this.dirty = true; + this.update_dom(); + }, + validate: function() { + this.is_invalid = false; + try { + var value = openerp.web.parse_value(this.get_value(), this, ''); + this.is_invalid = this.required && value === ''; + } catch(e) { + this.is_invalid = true; + } + }, + render: function() { + return _.str.sprintf("%s", this.name, QWeb.render(this.template, {widget: this})) + }, +}); +openerp.web.ViewEditor.FieldBoolean = openerp.web.ViewEditor.Field.extend({ + template : "vieweditor_boolean", + start: function() { + var self = this; + this._super(); + this.$element.find("input[id="+ self.name+"]").change(function() { + self.on_ui_change(); + }); + }, + set_value: function(value) { + if (value) { + this.$element.find("input[id=" + this.name+ "]").attr('checked', true); + } + }, + get_value: function() { + return this.$element.find("input[id=" + this.name + "]").is(':checked')? "1" : null; + } +}); +openerp.web.ViewEditor.FieldChar = openerp.web.ViewEditor.Field.extend({ + template : "vieweditor_char", + start: function () { + var self = this; + this._super(); + this.$element.find("input[id="+ this.name+"]").css('width','100%').change(function() { + self.on_ui_change(); + }); + }, + set_value: function(value) { + this.$element.find("input[id=" + this.name + "]").val(value); + }, + get_value: function() { + return this.$element.find("input[id=" + this.name + "]").val(); + } +}); +openerp.web.ViewEditor.FieldSelect = openerp.web.ViewEditor.Field.extend({ + template : "vieweditor_selection", + start: function () { + var self = this; + this._super(); + this.$element.find("select[id=" + this.name + "]").css('width', '100%').change(function() { + self.on_ui_change(); + if (self.name == "node_type") { + if (self.get_value() == "field") { + self.$element.find('#new_field').show(); + self.$element.find("select[id=field_value]").show(); + } else { + self.$element.find('#new_field').hide(); + self.$element.find("select[id=field_value]").hide(); + } + } + }); + }, + set_value: function(value) { + var index = 0; + value = value === null? false: value; + for (var i = 0, ii = this.selection.length; i < ii; i++) { + if ((this.selection[i] instanceof Array && this.selection[i][1] === value) || this.selection[i] === value) index = i; + } + this.$element.find("select[id=" + this.name + "]")[0].selectedIndex = index; + }, + get_value: function() { + return this.$element.find("select[id=" + this.name + "]").val(); + } +}); +openerp.web.ViewEditor.FieldSelectMulti = openerp.web.ViewEditor.FieldSelect.extend({ + start: function () { + this._super(); + this.$element.find("select[id=" + this.name + "]").css('height', '100px').attr("multiple", true); + }, + set_value: function(value) { + var self = this; + self.$element.find("#groups option").attr("selected",false); + if (!value) return false; + _.each(this.selection, function(item) { + if (_.include(value.split(','), item[0])) { + self.$element.find("select[id="+self.name+"] option[value='" + item[0] +"']").attr("selected",1) + } + }); + } +}); +openerp.web.ViewEditor.FieldFloat = openerp.web.ViewEditor.FieldChar.extend({ +}); +var _PROPERTIES = { + 'field' : ['name', 'string', 'required', 'readonly', 'domain', 'context', 'nolabel', 'completion', + 'colspan', 'widget', 'eval', 'ref', 'on_change', 'attrs', 'groups'], + 'form' : ['string', 'col', 'link'], + 'notebook' : ['colspan', 'position', 'groups'], + 'page' : ['string', 'states', 'attrs', 'groups'], + 'group' : ['string', 'col', 'colspan', 'states', 'attrs', 'groups'], + 'image' : ['filename', 'width', 'height', 'groups'], + 'separator' : ['string', 'colspan', 'groups'], + 'label': ['string', 'align', 'colspan', 'groups'], + 'button': ['name', 'string', 'icon', 'type', 'states', 'readonly', 'special', 'target', 'confirm', 'context', 'attrs', 'colspan', 'groups'], + 'newline' : [], + 'board': ['style'], + 'column' : [], + 'action' : ['name', 'string', 'colspan', 'groups'], + 'tree' : ['string', 'colors', 'editable', 'link', 'limit', 'min_rows'], + 'graph' : ['string', 'type'], + 'calendar' : ['string', 'date_start', 'date_stop', 'date_delay', 'day_length', 'color', 'mode'], +}; +var _CHILDREN = { + 'form': ['notebook', 'group', 'field', 'label', 'button','board', 'newline', 'separator'], + 'tree': ['field'], + 'graph': ['field'], + 'calendar': ['field'], + 'notebook': ['page'], + 'page': ['notebook', 'group', 'field', 'label', 'button', 'newline', 'separator'], + 'group': ['field', 'label', 'button', 'separator', 'newline'], + 'board': ['column'], + 'action': [], + 'field': ['form', 'tree', 'graph'], + 'label': [], + 'button' : [], + 'newline': [], + 'separator': [], +}; +var _ICONS = ['','STOCK_ABOUT', 'STOCK_ADD', 'STOCK_APPLY', 'STOCK_BOLD', + 'STOCK_CANCEL', 'STOCK_CDROM', 'STOCK_CLEAR', 'STOCK_CLOSE', 'STOCK_COLOR_PICKER', + 'STOCK_CONNECT', 'STOCK_CONVERT', 'STOCK_COPY', 'STOCK_CUT', 'STOCK_DELETE', + 'STOCK_DIALOG_AUTHENTICATION', 'STOCK_DIALOG_ERROR', 'STOCK_DIALOG_INFO', + 'STOCK_DIALOG_QUESTION', 'STOCK_DIALOG_WARNING', 'STOCK_DIRECTORY', 'STOCK_DISCONNECT', + 'STOCK_DND', 'STOCK_DND_MULTIPLE', 'STOCK_EDIT', 'STOCK_EXECUTE', 'STOCK_FILE', + 'STOCK_FIND', 'STOCK_FIND_AND_REPLACE', 'STOCK_FLOPPY', 'STOCK_GOTO_BOTTOM', + 'STOCK_GOTO_FIRST', 'STOCK_GOTO_LAST', 'STOCK_GOTO_TOP', 'STOCK_GO_BACK', + 'STOCK_GO_DOWN', 'STOCK_GO_FORWARD', 'STOCK_GO_UP', 'STOCK_HARDDISK', + 'STOCK_HELP', 'STOCK_HOME', 'STOCK_INDENT', 'STOCK_INDEX', 'STOCK_ITALIC', + 'STOCK_JUMP_TO', 'STOCK_JUSTIFY_CENTER', 'STOCK_JUSTIFY_FILL', + 'STOCK_JUSTIFY_LEFT', 'STOCK_JUSTIFY_RIGHT', 'STOCK_MEDIA_FORWARD', + 'STOCK_MEDIA_NEXT', 'STOCK_MEDIA_PAUSE', 'STOCK_MEDIA_PLAY', + 'STOCK_MEDIA_PREVIOUS', 'STOCK_MEDIA_RECORD', 'STOCK_MEDIA_REWIND', + 'STOCK_MEDIA_STOP', 'STOCK_MISSING_IMAGE', 'STOCK_NETWORK', 'STOCK_NEW', + 'STOCK_NO', 'STOCK_OK', 'STOCK_OPEN', 'STOCK_PASTE', 'STOCK_PREFERENCES', + 'STOCK_PRINT', 'STOCK_PRINT_PREVIEW', 'STOCK_PROPERTIES', 'STOCK_QUIT', + 'STOCK_REDO', 'STOCK_REFRESH', 'STOCK_REMOVE', 'STOCK_REVERT_TO_SAVED', + 'STOCK_SAVE', 'STOCK_SAVE_AS', 'STOCK_SELECT_COLOR', 'STOCK_SELECT_FONT', + 'STOCK_SORT_ASCENDING', 'STOCK_SORT_DESCENDING', 'STOCK_SPELL_CHECK', + 'STOCK_STOP', 'STOCK_STRIKETHROUGH', 'STOCK_UNDELETE', 'STOCK_UNDERLINE', + 'STOCK_UNDO', 'STOCK_UNINDENT', 'STOCK_YES', 'STOCK_ZOOM_100', + 'STOCK_ZOOM_FIT', 'STOCK_ZOOM_IN', 'STOCK_ZOOM_OUT', + 'terp-account', 'terp-crm', 'terp-mrp', 'terp-product', 'terp-purchase', + 'terp-sale', 'terp-tools', 'terp-administration', 'terp-hr', 'terp-partner', + 'terp-project', 'terp-report', 'terp-stock', 'terp-calendar', 'terp-graph' +]; +openerp.web.ViewEditor.property_widget = new openerp.web.Registry({ + 'boolean' : 'openerp.web.ViewEditor.FieldBoolean', + 'seleciton_multi' : 'openerp.web.ViewEditor.FieldSelectMulti', + 'selection' : 'openerp.web.ViewEditor.FieldSelect', + 'char' : 'openerp.web.ViewEditor.FieldChar', + 'float' : 'openerp.web.ViewEditor.FieldFloat', }); }; diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js index c5a2fbb4dc6..15a402efb47 100644 --- a/addons/web/static/src/js/view_form.js +++ b/addons/web/static/src/js/view_form.js @@ -33,16 +33,18 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# this.widgets = {}; this.widgets_counter = 0; this.fields = {}; + this.fields_order = []; this.datarecord = {}; this.show_invalid = true; this.default_focus_field = null; this.default_focus_button = null; - this.registry = this.readonly ? openerp.web.form.readonly : openerp.web.form.widgets; + this.registry = openerp.web.form.widgets; this.has_been_loaded = $.Deferred(); this.$form_header = null; this.translatable_fields = []; - _.defaults(this.options, {"always_show_new_button": true, - "not_interactible_on_create": false}); + _.defaults(this.options, { + "not_interactible_on_create": false + }); this.mutating_lock = $.Deferred(); this.initial_mutating_lock = this.mutating_lock; this.on_change_lock = $.Deferred().resolve(); @@ -86,6 +88,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# on_loaded: function(data) { var self = this; if (data) { + this.fields_order = []; this.fields_view = data; var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch); @@ -102,10 +105,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# }); this.$form_header.find('button.oe_form_button_save').click(this.on_button_save); - this.$form_header.find('button.oe_form_button_new').click(this.on_button_new); - this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate); - this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete); - this.$form_header.find('button.oe_form_button_toggle').click(this.on_toggle_readonly); + this.$form_header.find('button.oe_form_button_cancel').click(this.on_button_cancel); if (!this.sidebar && this.options.sidebar && this.options.sidebar_id) { this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id); @@ -117,23 +117,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } this.has_been_loaded.resolve(); }, - on_toggle_readonly: function() { - var self = this; - self.translatable_fields = []; - self.widgets = {}; - self.fields = {}; - self.$form_header.find('button').unbind('click'); - self.readonly = !self.readonly; - self.registry = self.readonly ? openerp.web.form.readonly : openerp.web.form.widgets; - self.on_loaded(self.fields_view); - return self.reload(); - }, - do_set_readonly: function() { - return this.readonly ? $.Deferred().resolve() : this.on_toggle_readonly(); - }, - do_set_editable: function() { - return !this.readonly ? $.Deferred().resolve() : this.on_toggle_readonly(); - }, do_show: function () { var promise; if (this.dataset.index === null) { @@ -160,19 +143,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# if (!record) { throw("Form: No record received"); } - if (!record.id) { - this.$form_header.find('.oe_form_on_create').show(); - this.$form_header.find('.oe_form_on_update').hide(); - if (!this.options["always_show_new_button"]) { - this.$form_header.find('button.oe_form_button_new').hide(); - } - } else { - this.$form_header.find('.oe_form_on_create').hide(); - this.$form_header.find('.oe_form_on_update').show(); - this.$form_header.find('button.oe_form_button_new').show(); - } - this.$form_header.find('.oe_form_on_readonly').toggle(this.readonly); - this.$form_header.find('.oe_form_on_editable').toggle(!this.readonly); this.datarecord = record; _(this.fields).each(function (field, f) { @@ -188,15 +158,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# deferred_stack.push('force resolution if no fields'); return deferred_stack.then(function() { if (!record.id) { - // New record: Second pass in order to trigger the onchanges self.show_invalid = false; - for (var f in record) { - var field = self.fields[f]; - if (field) { + // New record: Second pass in order to trigger the onchanges + // respecting the fields order defined in the view + _.each(self.fields_order, function(field_name) { + if (record[field_name] !== undefined) { + var field = self.fields[field_name]; field.dirty = true; self.do_onchange(field); } - } + }); } self.on_form_changed(); self.initial_mutating_lock.resolve(); @@ -273,6 +244,10 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# if (field in argument_replacement) { return argument_replacement[field](i); } + // literal number + if (/^-?\d+(\.\d+)?$/.test(field)) { + return Number(field); + } // form field if (self.fields[field]) { var value = self.fields[field].get_on_change_value(); @@ -380,7 +355,13 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# } }, on_button_save: function() { - return this.do_save().then(this.do_set_readonly); + var self = this; + return this.do_save().then(function(result) { + self.do_prev_view(result.created); + }); + }, + on_button_cancel: function() { + return this.do_prev_view(); }, on_button_new: function() { var self = this; @@ -388,55 +369,21 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# $.when(this.has_been_loaded).then(function() { if (self.can_be_discarded()) { var keys = _.keys(self.fields_view.fields); - $.when(self.do_set_editable()).then(function() { - if (keys.length) { - self.dataset.default_get(keys).pipe(self.on_record_loaded).then(function() { - def.resolve(); - }); - } else { - self.on_record_loaded({}).then(function() { - def.resolve(); - }); - } - }); - } - }); - return def.promise(); - }, - on_button_duplicate: function() { - var self = this; - var def = $.Deferred(); - $.when(this.has_been_loaded).then(function() { - if (self.can_be_discarded()) { - self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) { - return self.on_created({ result : new_id }); - }).then(self.do_set_editable).then(function() { - def.resolve(); - }); - } - }); - return def.promise(); - }, - on_button_delete: function() { - var self = this; - var def = $.Deferred(); - $.when(this.has_been_loaded).then(function() { - if (self.can_be_discarded() && self.datarecord.id) { - if (confirm(_t("Do you really want to delete this record?"))) { - self.dataset.unlink([self.datarecord.id]).then(function() { - self.on_pager_action('next'); + if (keys.length) { + self.dataset.default_get(keys).pipe(self.on_record_loaded).then(function() { def.resolve(); }); } else { - setTimeout(function () { - def.reject(); - }, 0) + self.on_record_loaded({}).then(function() { + def.resolve(); + }); } } }); return def.promise(); }, can_be_discarded: function() { + return true; // FIXME: Disabled until the page view and button refactoring is done return !this.is_dirty() || confirm(_t("Warning, the record has been modified, your changes will be discarded.")); }, /** @@ -476,22 +423,22 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView# self.on_invalid(); return $.Deferred().reject(); } else { + var save_deferral; if (!self.datarecord.id) { openerp.log("FormView(", self, ") : About to create", values); - return self.dataset.create(values).pipe(function(r) { + save_deferral = self.dataset.create(values).pipe(function(r) { return self.on_created(r, undefined, prepend_on_create); - }).then(success); + }, null); } else if (_.isEmpty(values)) { openerp.log("FormView(", self, ") : Nothing to save"); - if (success) { - success(); - } + save_deferral = $.Deferred().resolve({}).promise(); } else { openerp.log("FormView(", self, ") : About to save", values); - return self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) { + save_deferral = self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) { return self.on_saved(r); - }).then(success); + }, null); } + return save_deferral.then(success); } } catch (e) { console.error(e); @@ -951,8 +898,9 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({ var type = {}; if (node.tag == 'field') { type = this.view.fields_view.fields[node.attrs.name] || {}; - if (node.attrs.widget == 'statusbar') { + if (node.attrs.widget == 'statusbar' && node.attrs.nolabel !== '1') { // This way we can retain backward compatibility between addons and old clients + node.attrs.colspan = (parseInt(node.attrs.colspan, 10) || 1) + 1; node.attrs.nolabel = '1'; } } @@ -1095,6 +1043,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({ this.execute_action().always(function() { self.force_disabled = false; self.check_disable(); + $.tipTipClear(); }); }, execute_action: function() { @@ -1169,6 +1118,11 @@ openerp.web.form.WidgetLabel = openerp.web.form.Widget.extend({ if (this.node.tag == 'label' && (this.align === 'left' || this.node.attrs.colspan || (this.string && this.string.length > 32))) { this.template = "WidgetParagraph"; this.colspan = parseInt(this.node.attrs.colspan || 1, 10); + // Widgets default to right-aligned, but paragraph defaults to + // left-aligned + if (isNaN(parseFloat(this.node.attrs.align))) { + this.align = 'left'; + } } else { this.colspan = 1; this.width = '1%'; @@ -1209,6 +1163,7 @@ openerp.web.form.Field = openerp.web.form.Widget.extend(/** @lends openerp.web.f this.name = node.attrs.name; this.value = undefined; view.fields[this.name] = this; + view.fields_order.push(this.name); this.type = node.attrs.widget || view.fields_view.fields[node.attrs.name].type; this.element_name = "field_" + this.name + "_" + this.type; @@ -1600,7 +1555,7 @@ openerp.web.form.FieldSelection = openerp.web.form.Field.extend({ init: function(view, node) { var self = this; this._super(view, node); - this.values = this.field.selection; + this.values = _.clone(this.field.selection); _.each(this.values, function(v, i) { if (v[0] === false && v[1] === '') { self.values.splice(i, 1); @@ -2099,16 +2054,20 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ view.options.deletable = null; } } else if (view.view_type === "form") { + if (self.is_readonly()) { + view.view_type = 'page'; + } view.options.not_interactible_on_create = true; } views.push(view); }); this.views = views; - + this.viewmanager = new openerp.web.ViewManager(this, this.dataset, views); this.viewmanager.registry = openerp.web.views.clone({ list: 'openerp.web.form.One2ManyListView', - form: 'openerp.web.FormView' + form: 'openerp.web.FormView', + page: 'openerp.web.PageView' }); var once = $.Deferred().then(function() { self.init_form_last_update.resolve(); @@ -2121,10 +2080,9 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ controller.o2m = self; if (self.is_readonly()) controller.set_editable(false); - } else if (view_type == "form") { - if (self.is_readonly()) { - controller.on_toggle_readonly(); - $(controller.$element.find(".oe_form_buttons")[0]).children().remove(); + } else if (view_type == "form" || view_type == 'page') { + if (view_type == 'page') { + controller.$element.find(".oe_form_buttons").hide(); } controller.on_record_loaded.add_last(function() { once.resolve(); @@ -2154,22 +2112,23 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ reload_current_view: function() { var self = this; return self.is_loaded = self.is_loaded.pipe(function() { - var view = self.viewmanager.views[self.viewmanager.active_view].controller; - if(self.viewmanager.active_view === "list") { + var active_view = self.viewmanager.active_view; + var view = self.viewmanager.views[active_view].controller; + if(active_view === "list") { return view.reload_content(); - } else if (self.viewmanager.active_view === "form") { + } else if (active_view === "form" || active_view === 'page') { if (self.dataset.index === null && self.dataset.ids.length >= 1) { self.dataset.index = 0; } var act = function() { return view.do_show(); - } + }; self.form_last_update = self.form_last_update.pipe(act, act); return self.form_last_update; - } else if (self.viewmanager.active_view === "graph") { + } else if (active_view === "graph") { return view.do_search(self.build_domain(), self.dataset.get_context(), []); } - }); + }, undefined); }, set_value: function(value) { value = value || []; @@ -2233,6 +2192,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({ var self = this; if (!this.dataset) return []; + this.save_any_view(); var val = this.dataset.delete_all ? [commands.delete_all()] : []; val = val.concat(_.map(this.dataset.ids, function(id) { var alter_order = _.detect(self.dataset.to_create, function(x) {return x.id === id;}); @@ -2489,7 +2449,9 @@ openerp.web.form.Many2ManyListView = openerp.web.ListView.extend(/** @lends open do_activate_record: function(index, id) { var self = this; var pop = new openerp.web.form.FormOpenPopup(this); - pop.show_element(this.dataset.model, id, this.m2m_field.build_context(), {}); + pop.show_element(this.dataset.model, id, this.m2m_field.build_context(), { + readonly: this.widget_parent.is_readonly() + }); pop.on_write_completed.add_last(function() { self.reload_content(); }); @@ -2548,18 +2510,30 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope this.dataset.parent_view = this.options.parent_view; this.dataset.on_default_get.add(this.on_default_get); if (this.options.initial_view == "search") { - this.setup_search_view(); + self.rpc('/web/session/eval_domain_and_context', { + domains: [], + contexts: [this.context] + }, function (results) { + var search_defaults = {}; + _.each(results.context, function (value, key) { + var match = /^search_default_(.*)$/.exec(key); + if (match) { + search_defaults[match[1]] = value; + } + }); + self.setup_search_view(search_defaults); + }); } else { // "form" this.new_object(); } }, - setup_search_view: function() { + setup_search_view: function(search_defaults) { var self = this; if (this.searchview) { this.searchview.stop(); } this.searchview = new openerp.web.SearchView(this, - this.dataset, false, {}); + this.dataset, false, search_defaults); this.searchview.on_search.add(function(domains, contexts, groupbys) { if (self.initial_ids) { self.do_search(domains.concat([[["id", "in", self.initial_ids]], self.domain]), @@ -2743,18 +2717,15 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp on_write_completed: function() {}, setup_form_view: function() { var self = this; - this.view_form = new openerp.web.FormView(this, this.dataset, false, self.options.form_view_options); + var FormClass = this.options.readonly + ? openerp.web.views.get_object('page') + : openerp.web.views.get_object('form'); + this.view_form = new FormClass(this, this.dataset, false, self.options.form_view_options); if (this.options.alternative_form_view) { this.view_form.set_embedded_view(this.options.alternative_form_view); } this.view_form.appendTo(this.$element.find("#" + this.element_id + "_view_form")); - var once = $.Deferred().then(function() { - if (self.options.readonly) { - self.view_form.on_toggle_readonly(); - } - }); this.view_form.on_loaded.add_last(function() { - once.resolve(); var $buttons = self.view_form.$element.find(".oe_form_buttons"); $buttons.html(QWeb.render("FormOpenPopup.form.buttons")); var $nbutton = $buttons.find(".oe_formopenpopup-form-save"); @@ -2808,10 +2779,12 @@ openerp.web.form.FieldReference = openerp.web.form.Field.extend({ this.view_id = 'reference_' + _.uniqueId(); this.widgets = {}; this.fields = {}; + this.fields_order = []; this.selection = new openerp.web.form.FieldSelection(this, { attrs: { name: 'selection', widget: 'selection' }}); + this.reference_ready = true; this.selection.on_value_changed.add_last(this.on_selection_changed); this.m2o = new openerp.web.form.FieldMany2One(this, { attrs: { name: 'm2o', @@ -2821,10 +2794,12 @@ openerp.web.form.FieldReference = openerp.web.form.Field.extend({ on_nop: function() { }, on_selection_changed: function() { - var sel = this.selection.get_value(); - this.m2o.field.relation = sel; - this.m2o.set_value(null); - this.m2o.$element.toggle(sel !== false); + if (this.reference_ready) { + var sel = this.selection.get_value(); + this.m2o.field.relation = sel; + this.m2o.set_value(null); + this.m2o.$element.toggle(sel !== false); + } }, start: function() { this._super(); @@ -2839,11 +2814,18 @@ openerp.web.form.FieldReference = openerp.web.form.Field.extend({ }, set_value: function(value) { this._super(value); + this.reference_ready = false; + var vals = [], sel_val, m2o_val; if (typeof(value) === 'string') { - var vals = value.split(','); - this.selection.set_value(vals[0]); - this.m2o.set_value(parseInt(vals[1], 10)); + vals = value.split(','); } + sel_val = vals[0] || false; + m2o_val = vals[1] ? parseInt(vals[1], 10) : false; + this.selection.set_value(sel_val); + this.m2o.field.relation = sel_val; + this.m2o.set_value(m2o_val); + this.m2o.$element.toggle(sel_val !== false); + this.reference_ready = true; }, get_value: function() { var model = this.selection.get_value(), @@ -3053,119 +3035,7 @@ openerp.web.form.FieldStatus = openerp.web.form.Field.extend({ } }); -openerp.web.form.FieldReadonly = openerp.web.form.Field.extend({ -}); -openerp.web.form.FieldCharReadonly = openerp.web.form.FieldReadonly.extend({ - template: 'FieldChar.readonly', - init: function(view, node) { - this._super(view, node); - this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1'; - }, - set_value: function (value) { - this._super.apply(this, arguments); - var show_value = openerp.web.format_value(value, this, ''); - if (this.password) { - show_value = new Array(show_value.length + 1).join('*'); - } - this.$element.find('div').text(show_value); - return show_value; - } -}); -openerp.web.form.FieldURIReadonly = openerp.web.form.FieldCharReadonly.extend({ - template: 'FieldURI.readonly', - scheme: null, - set_value: function (value) { - var displayed = this._super.apply(this, arguments); - this.$element.find('a') - .attr('href', this.scheme + ':' + displayed) - .text(displayed); - } -}); -openerp.web.form.FieldEmailReadonly = openerp.web.form.FieldURIReadonly.extend({ - scheme: 'mailto' -}); -openerp.web.form.FieldUrlReadonly = openerp.web.form.FieldURIReadonly.extend({ - set_value: function (value) { - var s = /(\w+):(.+)/.exec(value); - if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; } - this.scheme = s[1]; - this._super(s[2]); - } -}); -openerp.web.form.FieldBooleanReadonly = openerp.web.form.FieldCharReadonly.extend({ - set_value: function (value) { - this._super(value ? '\u2611' : '\u2610'); - } -}); -openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend({ - template: 'FieldChar.readonly', - init: function(view, node) { - // lifted straight from r/w version - var self = this; - this._super(view, node); - this.values = this.field.selection; - _.each(this.values, function(v, i) { - if (v[0] === false && v[1] === '') { - self.values.splice(i, 1); - } - }); - this.values.unshift([false, '']); - }, - set_value: function (value) { - value = value === null ? false : value; - value = value instanceof Array ? value[0] : value; - var option = _(this.values) - .detect(function (record) { return record[0] === value; }); - this._super(value); - this.$element.find('div').text(option ? option[1] : this.values[0][1]); - } -}); -openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldURIReadonly.extend({ - set_value: function (value) { - value = value || null; - this.invalid = false; - var self = this; - this.value = value; - self.update_dom(); - self.on_value_changed(); - var real_set_value = function(rval) { - self.value = rval; - self.$element.find('a') - .unbind('click') - .text(rval ? rval[1] : '') - .click(function () { - self.do_action({ - type: 'ir.actions.act_window', - res_model: self.field.relation, - res_id: self.value[0], - context: self.build_context(), - views: [[false, 'form']], - target: 'current' - }); - return false; - }); - }; - if (value && !(value instanceof Array)) { - new openerp.web.DataSetStatic( - this, this.field.relation, self.build_context()) - .name_get([value], function(data) { - real_set_value(data[0]); - }); - } else { - setTimeout(function() {real_set_value(value);}, 0); - } - }, - get_value: function() { - if (!this.value) { - return false; - } else if (this.value instanceof Array) { - return this.value[0]; - } else { - return this.value; - } - } -}); /** * Registry of form widgets, called by :js:`openerp.web.FormView` @@ -3201,30 +3071,6 @@ openerp.web.form.widgets = new openerp.web.Registry({ 'statusbar': 'openerp.web.form.FieldStatus' }); -openerp.web.form.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({ - force_readonly: true -}); -openerp.web.form.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({ - force_readonly: true -}); -openerp.web.form.readonly = openerp.web.form.widgets.clone({ - 'char': 'openerp.web.form.FieldCharReadonly', - 'email': 'openerp.web.form.FieldEmailReadonly', - 'url': 'openerp.web.form.FieldUrlReadonly', - 'text': 'openerp.web.form.FieldCharReadonly', - 'text_wiki' : 'openerp.web.form.FieldCharReadonly', - 'date': 'openerp.web.form.FieldCharReadonly', - 'datetime': 'openerp.web.form.FieldCharReadonly', - 'selection' : 'openerp.web.form.FieldSelectionReadonly', - 'many2one': 'openerp.web.form.FieldMany2OneReadonly', - 'many2many' : 'openerp.web.form.FieldMany2ManyReadonly', - 'one2many' : 'openerp.web.form.FieldOne2ManyReadonly', - 'one2many_list' : 'openerp.web.form.FieldOne2ManyReadonly', - 'boolean': 'openerp.web.form.FieldBooleanReadonly', - 'float': 'openerp.web.form.FieldCharReadonly', - 'integer': 'openerp.web.form.FieldCharReadonly', - 'float_time': 'openerp.web.form.FieldCharReadonly' -}); }; diff --git a/addons/web/static/src/js/view_list.js b/addons/web/static/src/js/view_list.js index 728b090d679..f76eec7d178 100644 --- a/addons/web/static/src/js/view_list.js +++ b/addons/web/static/src/js/view_list.js @@ -388,10 +388,10 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * new record. * * @param {Number|void} index the record index (in the current dataset) to switch to - * @param {String} [view="form"] the view type to switch to + * @param {String} [view="page"] the view type to switch to */ select_record:function (index, view) { - view = view || 'form'; + view = view || index == null ? 'form' : 'page'; this.dataset.index = index; _.delay(_.bind(function () { this.do_switch_view(view); @@ -462,6 +462,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * @param {Object} results results of evaluating domain and process for a search */ do_search: function (domain, context, group_by) { + this.page = 0; this.groups.datagroup = new openerp.web.DataGroup( this, this.model, domain, context, group_by); this.groups.datagroup.sort = this.dataset._sort; @@ -661,8 +662,8 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView# * * @param {Number} count number of columns to add * @param {Object} options - * @param {"before"|"after"} [position="after"] insertion position for the new columns - * @param {Object} [except] content row to not pad + * @param {"before"|"after"} [options.position="after"] insertion position for the new columns + * @param {Object} [options.except] content row to not pad */ pad_columns: function (count, options) { options = options || {}; @@ -1191,7 +1192,7 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L } else if (column.type === 'float') { format = "%.2f"; } - $('') + $('') .text(_.str.sprintf(format, value)) .appendTo($row); } else { @@ -1280,10 +1281,15 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L items: '> tr[data-id]', stop: function (event, ui) { var to_move = list.records.get(ui.item.data('id')), - target_id = ui.item.prev().data('id'); + target_id = ui.item.prev().data('id'), + from_index = list.records.indexOf(to_move), + target = list.records.get(target_id); + if (list.records.at(from_index - 1) == target) { + return; + } list.records.remove(to_move); - var to = target_id ? list.records.indexOf(list.records.get(target_id)) + 1 : 0; + var to = target_id ? list.records.indexOf(target) + 1 : 0; list.records.add(to_move, { at: to }); // resequencing time! @@ -1295,7 +1301,14 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L // write are independent from one another, so we can just // launch them all at the same time and we don't really // give a fig about when they're done - dataset.write(record.get('id'), {sequence: seq}); + // FIXME: breaks on o2ms (e.g. Accounting > Financial + // Accounting > Taxes > Taxes, child tax accounts) + // when synchronous (without setTimeout) + (function (dataset, id, seq) { + setTimeout(function () { + dataset.write(id, {sequence: seq}); + }, 0); + }(dataset, record.get('id'), seq)); record.set('sequence', seq); } diff --git a/addons/web/static/src/js/view_list_editable.js b/addons/web/static/src/js/view_list_editable.js index dba0a1abba4..b2edf55b314 100644 --- a/addons/web/static/src/js/view_list_editable.js +++ b/addons/web/static/src/js/view_list_editable.js @@ -5,6 +5,7 @@ openerp.web.list_editable = function (openerp) { var KEY_RETURN = 13, KEY_ESCAPE = 27; + var QWeb = openerp.web.qweb; // editability status of list rows openerp.web.ListView.prototype.defaults.editable = null; @@ -165,6 +166,35 @@ openerp.web.list_editable = function (openerp) { view.arch.attrs.col = 2 * view.arch.children.length; return view; }, + on_row_keyup: function (e) { + var self = this; + switch (e.which) { + case KEY_RETURN: + this.save_row().then(function (result) { + if (result.created) { + self.new_record(); + return; + } + + var next_record_id, + next_record = self.records.at( + self.records.indexOf(result.edited_record) + 1); + if (next_record) { + next_record_id = next_record.get('id'); + self.dataset.index = _(self.dataset.ids) + .indexOf(next_record_id); + } else { + self.dataset.index = 0; + next_record_id = self.records.at(0).get('id'); + } + self.edit_record(next_record_id); + }); + break; + case KEY_ESCAPE: + this.cancel_edition(); + break; + } + }, render_row_as_form: function (row) { var self = this; this.cancel_pending_edition().then(function () { @@ -178,24 +208,10 @@ openerp.web.list_editable = function (openerp) { .delegate('button.oe-edit-row-save', 'click', function () { self.save_row(); }) - .delegate('button.oe-edit-row-cancel', 'click', function () { - self.cancel_edition(); - }) .delegate('button', 'keyup', function (e) { e.stopImmediatePropagation(); }) - .keyup(function (e) { - switch (e.which) { - case KEY_RETURN: - self.save_row(true); - break; - case KEY_ESCAPE: - self.cancel_edition(); - break; - default: - return; - } - }); + .keyup($.proxy(self, 'on_row_keyup')); if (row) { $new_row.replaceAll(row); } else if (self.options.editable) { @@ -230,20 +246,18 @@ openerp.web.list_editable = function (openerp) { .addClass('oe-field-cell') .removeAttr('width') .end() - .find('td:first').removeClass('oe-field-cell').end() .find('td:last').removeClass('oe-field-cell').end(); + if (self.options.selectable) { + $new_row.prepend(''); + } // pad in case of groupby _(self.columns).each(function (column) { if (column.meta) { $new_row.prepend(''); } }); - // Add columns for the cancel and save buttons, if - // there are none in the list - if (!self.options.selectable) { - self.view.pad_columns( - 1, {except: $new_row, position: 'before'}); - } + // Add column for the save, if + // there is none in the list if (!self.options.deletable) { self.view.pad_columns( 1, {except: $new_row}); @@ -273,53 +287,43 @@ openerp.web.list_editable = function (openerp) { }); }, /** - * Saves the current row, and triggers the edition of its following - * sibling if asked. + * Saves the current row, and returns a Deferred resolving to an object + * with the following properties: * - * @param {Boolean} [edit_next=false] should the next row become editable - * @returns {$.Deferred} + * ``created`` + * Boolean flag indicating whether the record saved was being created + * (``true`` or edited (``false``) + * ``edited_record`` + * The result of saving the record (either the newly created record, + * or the post-edition record), after insertion in the Collection if + * needs be. + * + * @returns {$.Deferred<{created: Boolean, edited_record: Record}>} */ - save_row: function (edit_next) { + save_row: function () { //noinspection JSPotentiallyInvalidConstructorUsage var self = this, done = $.Deferred(); - this.edition_form.do_save(function (result) { - if (result.created && !self.edition_id) { - self.records.add({id: result.result}, - {at: self.options.editable === 'top' ? 0 : null}); - self.edition_id = result.result; - } - var edited_record = self.records.get(self.edition_id), - next_record = self.records.at( - self.records.indexOf(edited_record) + 1); + return this.edition_form + .do_save(null, this.options.editable === 'top') + .pipe(function (result) { + if (result.created && !self.edition_id) { + self.records.add({id: result.result}, + {at: self.options.editable === 'top' ? 0 : null}); + self.edition_id = result.result; + } + var edited_record = self.records.get(self.edition_id); - $.when( - self.handle_onwrite(self.edition_id), - self.cancel_pending_edition().then(function () { - $(self).trigger('saved', [self.dataset]); - if (!edit_next) { - return; - } - if (result.created) { - self.new_record(); - return; - } - var next_record_id; - if (next_record) { - next_record_id = next_record.get('id'); - self.dataset.index = _(self.dataset.ids) - .indexOf(next_record_id); - } else { - self.dataset.index = 0; - next_record_id = self.records.at(0).get('id'); - } - self.edit_record(next_record_id); - })).then(function () { - done.resolve(); - }); - }, this.options.editable === 'top').fail(function () { - done.reject(); - }); - return done.promise(); + return $.when( + self.handle_onwrite(self.edition_id), + self.cancel_pending_edition().then(function () { + $(self).trigger('saved', [self.dataset]); + })).pipe(function () { + return { + created: result.created || false, + edited_record: edited_record + }; + }, null); + }, null); }, /** * If the current list is being edited, ensures it's saved @@ -350,6 +354,19 @@ openerp.web.list_editable = function (openerp) { new_record: function () { this.dataset.index = null; this.render_row_as_form(); + }, + render_record: function (record) { + var index = this.records.indexOf(record); + // FIXME: context dict should probably be extracted cleanly + return QWeb.render('ListView.row', { + columns: this.columns, + options: this.options, + record: record, + row_parity: (index % 2 === 0) ? 'even' : 'odd', + view: this.view, + render_cell: $.proxy(this, 'render_cell'), + edited: !!this.edition_form + }); } }); if (!openerp.web.list) { diff --git a/addons/web/static/src/js/view_page.js b/addons/web/static/src/js/view_page.js new file mode 100644 index 00000000000..2ca07152a56 --- /dev/null +++ b/addons/web/static/src/js/view_page.js @@ -0,0 +1,218 @@ +openerp.web.page = function (openerp) { + var _t = openerp.web._t; + var QWeb = openerp.web.qweb; + + openerp.web.views.add('page', 'openerp.web.PageView'); + openerp.web.PageView = openerp.web.FormView.extend({ + form_template: "PageView", + init: function () { + this._super.apply(this, arguments); + this.registry = openerp.web.page.readonly; + }, + on_loaded: function(data) { + this._super(data); + this.$form_header.find('button.oe_form_button_edit').click(this.on_button_edit); + this.$form_header.find('button.oe_form_button_create').click(this.on_button_create); + this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate); + this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete); + }, + on_button_edit: function() { + return this.do_switch_view('form'); + }, + on_button_create: function() { + this.dataset.index = null; + return this.do_switch_view('form'); + }, + on_button_duplicate: function() { + var self = this; + var def = $.Deferred(); + $.when(this.has_been_loaded).then(function() { + self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) { + return self.on_created({ result : new_id }); + }).then(function() { + return self.do_switch_view('form'); + }).then(function() { + def.resolve(); + }); + }); + return def.promise(); + }, + on_button_delete: function() { + var self = this; + var def = $.Deferred(); + $.when(this.has_been_loaded).then(function() { + if (self.datarecord.id && confirm(_t("Do you really want to delete this record?"))) { + self.dataset.unlink([self.datarecord.id]).then(function() { + self.on_pager_action('next'); + def.resolve(); + }); + } else { + setTimeout(function () { + def.reject(); + }, 0) + } + }); + return def.promise(); + } + }); + + /** @namespace */ + openerp.web.page = {}; + + openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({ + + }); + openerp.web.page.FieldCharReadonly = openerp.web.page.FieldReadonly.extend({ + template: 'FieldChar.readonly', + init: function(view, node) { + this._super(view, node); + this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1'; + }, + set_value: function (value) { + this._super.apply(this, arguments); + var show_value = openerp.web.format_value(value, this, ''); + if (this.password) { + show_value = new Array(show_value.length + 1).join('*'); + } + this.$element.find('div').text(show_value); + return show_value; + } + }); + openerp.web.page.FieldURIReadonly = openerp.web.page.FieldCharReadonly.extend({ + template: 'FieldURI.readonly', + scheme: null, + set_value: function (value) { + var displayed = this._super.apply(this, arguments); + this.$element.find('a') + .attr('href', this.scheme + ':' + displayed) + .text(displayed); + } + }); + openerp.web.page.FieldEmailReadonly = openerp.web.page.FieldURIReadonly.extend({ + scheme: 'mailto' + }); + openerp.web.page.FieldUrlReadonly = openerp.web.page.FieldURIReadonly.extend({ + set_value: function (value) { + var s = /(\w+):(.+)/.exec(value); + if (!s || !(s[1] === 'http' || s[1] === 'https')) { return; } + this.scheme = s[1]; + this._super(s[2]); + } + }); + openerp.web.page.FieldBooleanReadonly = openerp.web.page.FieldCharReadonly.extend({ + set_value: function (value) { + this._super(value ? '\u2611' : '\u2610'); + } + }); + openerp.web.page.FieldSelectionReadonly = openerp.web.page.FieldReadonly.extend({ + template: 'FieldChar.readonly', + init: function(view, node) { + // lifted straight from r/w version + var self = this; + this._super(view, node); + this.values = _.clone(this.field.selection); + _.each(this.values, function(v, i) { + if (v[0] === false && v[1] === '') { + self.values.splice(i, 1); + } + }); + this.values.unshift([false, '']); + }, + set_value: function (value) { + value = value === null ? false : value; + value = value instanceof Array ? value[0] : value; + var option = _(this.values) + .detect(function (record) { return record[0] === value; }); + this._super(value); + this.$element.find('div').text(option ? option[1] : this.values[0][1]); + } + }); + openerp.web.page.FieldMany2OneReadonly = openerp.web.page.FieldURIReadonly.extend({ + set_value: function (value) { + value = value || null; + this.invalid = false; + var self = this; + this.value = value; + self.update_dom(); + self.on_value_changed(); + var real_set_value = function(rval) { + self.value = rval; + self.$element.find('a') + .unbind('click') + .text(rval ? rval[1] : '') + .click(function () { + self.do_action({ + type: 'ir.actions.act_window', + res_model: self.field.relation, + res_id: self.value[0], + context: self.build_context(), + views: [[false, 'page'], [false, 'form']], + target: 'current' + }); + return false; + }); + }; + if (value && !(value instanceof Array)) { + new openerp.web.DataSetStatic( + this, this.field.relation, self.build_context()) + .name_get([value], function(data) { + real_set_value(data[0]); + }); + } else { + setTimeout(function() {real_set_value(value);}, 0); + } + }, + get_value: function() { + if (!this.value) { + return false; + } else if (this.value instanceof Array) { + return this.value[0]; + } else { + return this.value; + } + } + }); + openerp.web.page.FieldReferenceReadonly = openerp.web.page.FieldMany2OneReadonly.extend({ + set_value: function (value) { + if (!value) { + return this._super(null); + } + var reference = value.split(','); + this.field.relation = reference[0]; + var id = parseInt(reference[1], 10); + return this._super(id); + }, + get_value: function () { + if (!this.value) { + return null; + } + return _.str.sprintf('%s,%d', this.field.relation, this.value[0]); + } + }); + + openerp.web.page.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({ + force_readonly: true + }); + openerp.web.page.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({ + force_readonly: true + }); + openerp.web.page.readonly = openerp.web.form.widgets.clone({ + 'char': 'openerp.web.page.FieldCharReadonly', + 'email': 'openerp.web.page.FieldEmailReadonly', + 'url': 'openerp.web.page.FieldUrlReadonly', + 'text': 'openerp.web.page.FieldCharReadonly', + 'text_wiki' : 'openerp.web.page.FieldCharReadonly', + 'date': 'openerp.web.page.FieldCharReadonly', + 'datetime': 'openerp.web.page.FieldCharReadonly', + 'selection' : 'openerp.web.page.FieldSelectionReadonly', + 'many2one': 'openerp.web.page.FieldMany2OneReadonly', + 'many2many' : 'openerp.web.page.FieldMany2ManyReadonly', + 'one2many' : 'openerp.web.page.FieldOne2ManyReadonly', + 'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly', + 'reference': 'openerp.web.page.FieldReferenceReadonly', + 'boolean': 'openerp.web.page.FieldBooleanReadonly', + 'float': 'openerp.web.page.FieldCharReadonly', + 'integer': 'openerp.web.page.FieldCharReadonly', + 'float_time': 'openerp.web.page.FieldCharReadonly' + }); +}; diff --git a/addons/web/static/src/js/views.js b/addons/web/static/src/js/views.js index 5a26ef58b03..f583dd259e7 100644 --- a/addons/web/static/src/js/views.js +++ b/addons/web/static/src/js/views.js @@ -75,6 +75,10 @@ session.web.ActionManager = session.web.Widget.extend({ } }, do_action: function(action, on_close) { + if (!action.type) { + console.error("No type for action", action); + return; + } var type = action.type.replace(/\./g,'_'); var popup = action.target === 'new'; action.flags = _.extend({ @@ -85,12 +89,24 @@ session.web.ActionManager = session.web.Widget.extend({ pager : !popup }, action.flags || {}); if (!(type in this)) { - console.log("Action manager can't handle action of type " + action.type, action); + console.error("Action manager can't handle action of type " + action.type, action); return; } return this[type](action, on_close); }, + null_action: function() { + this.dialog_stop(); + this.content_stop(); + }, ir_actions_act_window: function (action, on_close) { + if (_(['base.module.upgrade', 'base.setup.installer']) + .contains(action.res_model)) { + var old_close = on_close; + on_close = function () { + session.webclient.do_reload(); + if (old_close) { old_close(); } + }; + } if (action.target === 'new') { if (this.dialog == null) { this.dialog = new session.web.Dialog(this, { title: action.name, width: '80%' }); @@ -121,12 +137,6 @@ session.web.ActionManager = session.web.Widget.extend({ if (!this.dialog && on_closed) { on_closed(); } - if (this.dialog && action.context) { - var model = action.context.active_model; - if (model === 'base.module.upgrade' || model === 'base.setup.installer' || model === 'base.module.upgrade') { - session.webclient.do_reload(); - } - } this.dialog_stop(); }, ir_actions_server: function (action, on_closed) { @@ -186,12 +196,12 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View this.model = dataset ? dataset.model : undefined; this.dataset = dataset; this.searchview = null; - this.last_search = false; this.active_view = null; this.views_src = _.map(views, function(x) {return x instanceof Array? {view_id: x[0], view_type: x[1]} : x;}); this.views = {}; this.flags = this.flags || {}; this.registry = session.web.views; + this.views_history = []; }, render: function() { return session.web.qweb.render(this.template, { @@ -211,6 +221,7 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View var views_ids = {}; _.each(this.views_src, function(view) { self.views[view.view_type] = $.extend({}, view, { + deferred : $.Deferred(), controller : null, options : _.extend({ sidebar_id : self.element_id + '_sidebar_' + view.view_type, @@ -230,11 +241,15 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View * Asks the view manager to switch visualization mode. * * @param {String} view_type type of view to display + * @param {Boolean} [no_store=false] don't store the view being switched to on the switch stack * @returns {jQuery.Deferred} new view loading promise */ - on_mode_switch: function(view_type) { + on_mode_switch: function(view_type, no_store) { var self = this, view_promise; + if (!no_store) { + this.views_history.push(view_type); + } this.active_view = view_type; var view = this.views[view_type]; if (!view.controller) { @@ -245,17 +260,19 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View controller.set_embedded_view(view.embedded_view); } controller.do_switch_view.add_last(this.on_mode_switch); + controller.do_prev_view.add_last(this.on_prev_view); var container = $("#" + this.element_id + '_view_' + view_type); view_promise = controller.appendTo(container); this.views[view_type].controller = controller; + this.views[view_type].deferred.resolve(); $.when(view_promise).then(function() { self.on_controller_inited(view_type, controller); if (self.searchview && view.controller.searchable !== false) { - self.do_searchview_search(); + self.searchview.ready.then(self.searchview.do_search); } }); } else if (this.searchview && view.controller.searchable !== false) { - self.do_searchview_search(); + this.searchview.ready.then(this.searchview.do_search); } if (this.searchview) { @@ -263,7 +280,7 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View } this.$element - .find('.views-switchers button').removeAttr('disabled') + .find('.oe_vm_switch button').removeAttr('disabled') .filter('[data-view-type="' + view_type + '"]') .attr('disabled', true); @@ -278,11 +295,29 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View } } $.when(view_promise).then(function () { - self.$element.find('.oe_view_title:first').text( + self.$element.find('.oe_view_title_text:first').text( self.display_title()); }); return view_promise; }, + /** + * Returns to the view preceding the caller view in this manager's + * navigation history (the navigation history is appended to via + * on_mode_switch) + * + * @param {Boolean} [created=false] returning from a creation + * @returns {$.Deferred} switching end signal + */ + on_prev_view: function (created) { + var current_view = this.views_history.pop(); + var previous_view = this.views_history[this.views_history.length - 1]; + // APR special case: "If creation mode from list (and only from a list), + // after saving, go to page view (don't come back in list)" + if (created && current_view === 'form' && previous_view === 'list') { + return this.on_mode_switch('page'); + } + return this.on_mode_switch(previous_view, true); + }, /** * Sets up the current viewmanager's search view. * @@ -304,20 +339,15 @@ session.web.ViewManager = session.web.Widget.extend(/** @lends session.web.View do_searchview_search: function(domains, contexts, groupbys) { var self = this, controller = this.views[this.active_view].controller; - if (domains || contexts) { - this.rpc('/web/session/eval_domain_and_context', { - domains: [this.action.domain || []].concat(domains || []), - contexts: [this.action.context || {}].concat(contexts || []), - group_by_seq: groupbys || [] - }, function (results) { - self.dataset.context = results.context; - self.dataset.domain = results.domain; - self.last_search = [results.domain, results.context, results.group_by]; - controller.do_search(results.domain, results.context, results.group_by); - }); - } else if (this.last_search) { - controller.do_search.apply(controller, this.last_search); - } + this.rpc('/web/session/eval_domain_and_context', { + domains: [this.action.domain || []].concat(domains || []), + contexts: [this.action.context || {}].concat(contexts || []), + group_by_seq: groupbys || [] + }, function (results) { + self.dataset.context = results.context; + self.dataset.domain = results.domain; + controller.do_search(results.domain, results.context, results.group_by); + }); }, /** * Event launched when a controller has been inited. @@ -375,10 +405,16 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner } this.dataset = dataset; this.flags = this.action.flags || {}; - if (action.res_model == 'board.board' && action.views.length == 1 && action.views) { - // Not elegant but allows to avoid form chrome (pager, save/new - // buttons, sidebar, ...) displaying - this.flags.search_view = this.flags.pager = this.flags.sidebar = this.flags.action_buttons = false; + if (action.res_model == 'board.board' && action.view_mode === 'form') { + // Special case for Dashboards + _.extend(this.flags, { + views_switcher : false, + display_title : false, + search_view : false, + pager : false, + sidebar : false, + action_buttons : false + }); } // setup storage for session-wise menu hiding @@ -411,21 +447,18 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner var main_view_loaded = this._super(); var manager_ready = $.when(searchview_loaded, main_view_loaded); - if (searchview_loaded && this.action['auto_search'] !== false) { - // schedule auto_search - manager_ready.then(this.searchview.do_search); - } this.$element.find('.oe_get_xml_view').click(function () { - // TODO: add search view? - $('
').text(session.web.json_node_to_xml(
-                self.views[self.active_view].controller.fields_view.arch, true))
-                    .dialog({ width: '95%'});
+            var view = self.views[self.active_view].controller,
+                view_id = view.fields_view.view_id;
+            if (view_id) {
+                view.on_sidebar_edit_resource('ir.ui.view', view_id);
+            }
         });
         if (this.action.help && !this.flags.low_profile) {
             var Users = new session.web.DataSet(self, 'res.users'),
-                header = this.$element.find('.oe-view-manager-header');
-            header.delegate('blockquote button', 'click', function() {
+                $tips = this.$element.find('.oe_view_manager_menu_tips');
+            $tips.delegate('blockquote button', 'click', function() {
                 var $this = $(this);
                 //noinspection FallthroughInSwitchStatementJS
                 switch ($this.attr('name')) {
@@ -442,7 +475,7 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
                     if (!(user && user.id === self.session.uid)) {
                         return;
                     }
-                    header.find('blockquote').toggle(user.menu_tips);
+                    $tips.find('blockquote').toggle(user.menu_tips);
                 });
             }
         }
@@ -459,10 +492,15 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
 
         return manager_ready;
     },
-    on_mode_switch: function (view_type) {
+    on_mode_switch: function (view_type, no_store) {
         var self = this;
+        var switched = $.when(this._super(view_type, no_store)).then(function () {
+            self.$element.find('.oe-view-manager-logs:first')
+                .addClass('oe-folded').removeClass('oe-has-more')
+                .find('ul').empty();
+        });
         return $.when(
-                this._super(view_type),
+                switched,
                 this.shortcut_check(this.views[view_type])
             ).then(function() {
                 var controller = self.views[self.active_view].controller,
@@ -470,10 +508,10 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
                     view_id = (fvg && fvg.view_id) || '--';
                 self.$element.find('.oe_get_xml_view span').text(view_id);
                 if (!self.action.name && fvg) {
-                    self.$element.find('.oe_view_title').text(fvg.arch.attrs.string || fvg.name);
+                    self.$element.find('.oe_view_title_text').text(fvg.arch.attrs.string || fvg.name);
                 }
 
-                var $title = self.$element.find('.oe_view_title'),
+                var $title = self.$element.find('.oe_view_title_text'),
                     $search_prefix = $title.find('span.oe_searchable_view');
                 if (controller.searchable !== false) {
                     if (!$search_prefix.length) {
@@ -575,25 +613,29 @@ session.web.Sidebar = session.web.Widget.extend({
         });
     },
     add_default_sections: function() {
+        var self = this,
+            view = this.widget_parent,
+            view_manager = view.widget_parent,
+            action = view_manager.action;
         if (this.session.uid === 1) {
             this.add_section(_t('Customize'), 'customize');
             this.add_items('customize', [
                 {
                     label: _t("Manage Views"),
-                    callback: this.widget_parent.on_sidebar_manage_views,
+                    callback: view.on_sidebar_manage_views,
                     title: _t("Manage views of the current object")
                 }, {
                     label: _t("Edit Workflow"),
-                    callback: this.widget_parent.on_sidebar_edit_workflow,
+                    callback: view.on_sidebar_edit_workflow,
                     title: _t("Manage views of the current object"),
                     classname: 'oe_hide oe_sidebar_edit_workflow'
                 }, {
                     label: _t("Customize Object"),
-                    callback: this.widget_parent.on_sidebar_customize_object,
+                    callback: view.on_sidebar_customize_object,
                     title: _t("Manage views of the current object")
                 }, {
                     label: _t("Translate"),
-                    callback: this.widget_parent.on_sidebar_translate,
+                    callback: view.on_sidebar_translate,
                     title: _t("Technical translation")
                 }
             ]);
@@ -603,16 +645,36 @@ session.web.Sidebar = session.web.Widget.extend({
         this.add_items('other', [
             {
                 label: _t("Import"),
-                callback: this.widget_parent.on_sidebar_import
+                callback: view.on_sidebar_import
             }, {
                 label: _t("Export"),
-                callback: this.widget_parent.on_sidebar_export
+                callback: view.on_sidebar_export
             }, {
                 label: _t("View Log"),
-                callback: this.widget_parent.on_sidebar_view_log,
+                callback: view.on_sidebar_view_log,
                 classname: 'oe_hide oe_sidebar_view_log'
             }
         ]);
+
+        if (session.connection.debug) {
+            this.add_section("Debug", 'debug');
+            if (action && action.id) {
+                this.add_items('debug', [{
+                    label: "Edit Action",
+                    callback: function() {
+                        view.on_sidebar_edit_resource(action.type, action.id);
+                    }
+                }]);
+            }
+            if (view_manager.searchview && view_manager.searchview.view_id) {
+                this.add_items('debug', [{
+                    label: "Edit SearchView",
+                    callback: function() {
+                        view.on_sidebar_edit_resource('ir.ui.view', view_manager.searchview.view_id);
+                    }
+                }]);
+            }
+        }
     },
 
     add_toolbar: function(toolbar) {
@@ -915,7 +977,19 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
         if (action_data.special) {
             return handler({result: {"type":"ir.actions.act_window_close"}});
         } else if (action_data.type=="object") {
-            return dataset.call_button(action_data.name, [[record_id], context], handler);
+            var args = [[record_id]], additional_args = [];
+            if (action_data.args) {
+                try {
+                    // Warning: quotes and double quotes problem due to json and xml clash
+                    // Maybe we should force escaping in xml or do a better parse of the args array
+                    additional_args = JSON.parse(action_data.args.replace(/'/g, '"'));
+                    args = args.concat(additional_args);
+                } catch(e) {
+                    console.error("Could not JSON.parse arguments", action_data.args);
+                }
+            }
+            args.push(context);
+            return dataset.call_button(action_data.name, args, handler);
         } else if (action_data.type=="action") {
             return this.rpc('/web/action/load', { action_id: parseInt(action_data.name, 10), context: context, do_not_eval: true}, handler);
         } else  {
@@ -933,8 +1007,16 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
         this.embedded_view = embedded_view;
         this.options.sidebar = false;
     },
-    do_switch_view: function(view) {
-    },
+    /**
+     * Switches to a specific view type
+     *
+     * @param {String} view view type to switch to
+     */
+    do_switch_view: function(view) { },
+    /**
+     * Cancels the switch to the current view, switches to the previous one
+     */
+    do_prev_view: function () { },
     do_search: function(view) {
     },
 
@@ -953,7 +1035,14 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
         console.log('Todo');
     },
     on_sidebar_customize_object: function() {
-        console.log('Todo');
+        var self = this;
+        this.rpc('/web/dataset/search_read', {
+            model: 'ir.model',
+            fields: ['id'],
+            domain: [['model', '=', self.dataset.model]]
+        }, function (result) {
+            self.on_sidebar_edit_resource('ir.model', result.ids[0]);
+        });
     },
     on_sidebar_import: function() {
         var import_view = new session.web.DataImport(this, this.dataset);
@@ -969,11 +1058,29 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
             domain : [['type', '!=', 'object'], '|', ['name', '=', this.dataset.model], ['name', 'ilike', this.dataset.model + ',']],
             views: [[false, 'list'], [false, 'form']],
             type : 'ir.actions.act_window',
-            auto_search : true,
             view_type : "list",
             view_mode : "list"
         });
     },
+    on_sidebar_edit_resource: function(model, id, domain) {
+        var action = {
+            res_model : model,
+            type : 'ir.actions.act_window',
+            view_type : 'form',
+            view_mode : 'form',
+            target : 'new',
+            flags : {}
+        }
+        if (id) {
+            action.res_id = id,
+            action.views = [[false, 'form']];
+        } else if (domain) {
+            action.views = [[false, 'list'], [false, 'form']];
+            action.domain = domain;
+            action.flags.views_switcher = true;
+        }
+        this.do_action(action);
+    },
     on_sidebar_view_log: function() {
     },
     sidebar_context: function () {
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 24defe23e2e..393cb46143c 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -414,11 +414,12 @@
 
 
     
+    
+    

- +

@@ -439,22 +440,31 @@
- -
-

-
- - -
-
- - + + + + + +
+ + + + + @@ -530,16 +540,17 @@ t-att-id="'treerow_' + record.id" t-att-data-id="record.id" t-att-data-level="level + 1"> - + + t-att-class="class"> + @@ -625,18 +636,9 @@ - - - - - - - - - - - - + + + - + @@ -657,14 +659,8 @@
- - - - - + +
@@ -678,6 +674,14 @@
+ + + + + + + +
@@ -722,7 +726,6 @@ @@ -732,6 +735,11 @@ + + + this.attr('class', this.attr('class')+' oe_form_readonly'); + +
@@ -854,15 +862,15 @@ t-att-name="widget.name" t-att-id="widget.element_id" t-attf-class="field_#{widget.type} #{_(['integer', 'float', 'float_time']).contains(widget.type) ? 'oe-number' : ''}" - t-attf-style="width: #{widget.field.translate ? '99' : '100'}%" + style="width: 100%" /> - +
+ style="width: 100%">
@@ -871,7 +879,7 @@ -
+ @@ -885,7 +893,7 @@ - - - - - - - - - + + + + + + + + + + + + + + + + + + + Export @@ -1634,7 +1683,7 @@
+ @@ -901,9 +909,9 @@ t-att-name="widget.name" t-att-id="widget.element_id" t-attf-class="field_#{widget.type}" - t-attf-style="width: #{widget.field.translate ? '99' : '100'}%" + style="width: 100%" > - +
@@ -1131,15 +1139,17 @@ - - - - - - - - - + + + + + + + + + +
@@ -1148,6 +1158,16 @@

(Any existing filter with the same name will be replaced)

+ +
+

Select Dashboard to add this filter to:

+ +

Title of new Dashboard item:

+ +
+
@@ -1369,6 +1389,18 @@ + + + +
+ + + + + $(document.createElement('t')) @@ -1380,10 +1412,8 @@ .replaceAll(this) .after($(document.createElement('td')).append( $(document.createElement('button')).attr({ - 'class': 'oe-edit-row-save', 'type': 'button'}).text('Save'))) - .before($(document.createElement('td')).append( - $(document.createElement('button')).attr({ - 'class': 'oe-edit-row-cancel', 'type': 'button'}).text('Cancel'))) + 'class': 'oe-edit-row-save', 'type': 'button'}) + .html(' '))) .unwrap(); @@ -1392,51 +1422,70 @@
-
- - - - - -
- - - -
-
- - - - - - - - -
- - - - - - - - - -
-
+ + + + + +
+ + + + + +
+
+ + + + + + + + +
+ + + + + + + + + +
+
-

The import failed due to:

+

The import failed due to:

Here is a preview of the file we could not import:

diff --git a/addons/web/static/test/formats.js b/addons/web/static/test/formats.js index d530571583c..cde11a188c0 100644 --- a/addons/web/static/test/formats.js +++ b/addons/web/static/test/formats.js @@ -63,6 +63,13 @@ $(document).ready(function () { // var res = openerp.web.parse_value(val.toString("HH:mm:ss"), {type:"time"}); // equal(val.toString("HH:mm:ss"), res.toString("HH:mm:ss")); // }); + test('parse_integer', function () { + var val = openerp.web.parse_value('123,456', {type: 'integer'}); + equal(val, 123456); + openerp.web._t.database.parameters.thousands_sep = '|'; + var val2 = openerp.web.parse_value('123|456', {type: 'integer'}); + equal(val2, 123456); + }); test("parse_float", function () { var str = "134,112.1234"; var val = openerp.web.parse_value(str, {type:"float"}); @@ -70,6 +77,12 @@ $(document).ready(function () { var str = "-134,112.1234"; var val = openerp.web.parse_value(str, {type:"float"}); equal(val, -134112.1234); + _.extend(openerp.web._t.database.parameters, { + decimal_point: ',', + thousands_sep: '.' + }); + var val3 = openerp.web.parse_value('123.456,789', {type: 'float'}); + equal(val3, 123456.789); }); test('intersperse', function () { var g = openerp.web.intersperse; @@ -100,6 +113,8 @@ $(document).ready(function () { equal(g("12345678", [2, 0, 1], '.'), '12.34.56.78'); equal(g("12345678", [2, 0, 0], '.'), '12.34.56.78'); equal(g("12345678", [2, 0, -1], '.'), '12.34.56.78'); + equal(g("12345678", [3,3,3,3], '.'), '12.345.678'); + equal(g("12345678", [3,0], '.'), '12.345.678'); }); test('format_integer', function () { openerp.web._t.database.parameters.grouping = [3, 3, 3, 3]; diff --git a/addons/web/static/test/onchange.js b/addons/web/static/test/onchange.js index 9f047f33d93..8074c755bd3 100644 --- a/addons/web/static/test/onchange.js +++ b/addons/web/static/test/onchange.js @@ -62,4 +62,13 @@ $(document).ready(function () { var result2 = f.parse_on_change("on_str('foo')", {}); deepEqual(result2.args, ['foo']); }); + test('Literal number', function () { + var f = make_form(); + var result = f.parse_on_change('on_str(42)', {}); + deepEqual(result.args, [42]); + var result2 = f.parse_on_change("on_str(-25)", {}); + deepEqual(result2.args, [-25]); + var result3 = f.parse_on_change("on_str(25.02)", {}); + deepEqual(result3.args, [25.02]); + }); }); diff --git a/addons/web/static/test/test.html b/addons/web/static/test/test.html index 9bbfff168fd..b1018bc00ca 100644 --- a/addons/web/static/test/test.html +++ b/addons/web/static/test/test.html @@ -5,14 +5,14 @@ OpenERP - - + + - + diff --git a/addons/web_calendar/__openerp__.py b/addons/web_calendar/__openerp__.py index fcdbd3746c7..877e96d918f 100644 --- a/addons/web_calendar/__openerp__.py +++ b/addons/web_calendar/__openerp__.py @@ -1,6 +1,10 @@ { "name": "web calendar", - "category" : "Hidden", + "category": "Hidden", + "description": + """ + OpenERP Web calendar view. + """, "version": "2.0", "depends": ['web'], "js": [ diff --git a/addons/web_calendar/po/ar.po b/addons/web_calendar/po/ar.po index 4263e2bde16..e49527e3027 100644 --- a/addons/web_calendar/po/ar.po +++ b/addons/web_calendar/po/ar.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-03 15:02+0000\n" "Last-Translator: kifcaliph \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/bn.po b/addons/web_calendar/po/bn.po new file mode 100644 index 00000000000..8c403f44b6d --- /dev/null +++ b/addons/web_calendar/po/bn.po @@ -0,0 +1,30 @@ +# Bengali translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-11-24 12:51+0000\n" +"Last-Translator: nasir khan saikat \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" + +#: addons/web_calendar/static/src/xml/web_calendar.xml:0 +msgid " " +msgstr " " diff --git a/addons/web_calendar/po/da.po b/addons/web_calendar/po/da.po index 038a7c3cd08..08f14b5cc98 100644 --- a/addons/web_calendar/po/da.po +++ b/addons/web_calendar/po/da.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-11 13:57+0000\n" "Last-Translator: Jonas Mortensen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/de.po b/addons/web_calendar/po/de.po index ed614c661b6..6e1f497efda 100644 --- a/addons/web_calendar/po/de.po +++ b/addons/web_calendar/po/de.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-10 12:36+0000\n" "Last-Translator: Felix Schubert \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/es.po b/addons/web_calendar/po/es.po index 07af7e0926d..2016e308367 100644 --- a/addons/web_calendar/po/es.po +++ b/addons/web_calendar/po/es.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-18 10:41+0000\n" "Last-Translator: Amós Oviedo \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/es_EC.po b/addons/web_calendar/po/es_EC.po index 43df5a70a01..607a33d0d82 100644 --- a/addons/web_calendar/po/es_EC.po +++ b/addons/web_calendar/po/es_EC.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-07 15:54+0000\n" "Last-Translator: Cristian Salamea (Gnuthink) \n" "Language-Team: Spanish (Ecuador) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/et.po b/addons/web_calendar/po/et.po index 42d69283eb7..cef0d66ed6b 100644 --- a/addons/web_calendar/po/et.po +++ b/addons/web_calendar/po/et.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-10 19:20+0000\n" "Last-Translator: Aare Vesi \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/fr.po b/addons/web_calendar/po/fr.po index 92c6328e59a..4555e9c0dea 100644 --- a/addons/web_calendar/po/fr.po +++ b/addons/web_calendar/po/fr.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-23 12:12+0000\n" "Last-Translator: fhe (OpenERP) \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/gl.po b/addons/web_calendar/po/gl.po index fc6d0982a9f..2cbb06ed188 100644 --- a/addons/web_calendar/po/gl.po +++ b/addons/web_calendar/po/gl.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-19 10:25+0000\n" "Last-Translator: Amós Oviedo \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/hr.po b/addons/web_calendar/po/hr.po new file mode 100644 index 00000000000..990fcf1170c --- /dev/null +++ b/addons/web_calendar/po/hr.po @@ -0,0 +1,30 @@ +# Croatian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-11-28 12:04+0000\n" +"Last-Translator: Goran Kliska \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" + +#: addons/web_calendar/static/src/xml/web_calendar.xml:0 +msgid " " +msgstr " " diff --git a/addons/web_calendar/po/it.po b/addons/web_calendar/po/it.po index b99ba98bc47..8516f86af87 100644 --- a/addons/web_calendar/po/it.po +++ b/addons/web_calendar/po/it.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-08 13:39+0000\n" "Last-Translator: Nicola Riolini - Micronaet \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/nl.po b/addons/web_calendar/po/nl.po new file mode 100644 index 00000000000..ac3f7a200ac --- /dev/null +++ b/addons/web_calendar/po/nl.po @@ -0,0 +1,30 @@ +# Dutch translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-06 11:46+0000\n" +"Last-Translator: Douwe Wullink (Dypalio) \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-07 05:25+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "Verantwoordelijke" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "Navigator" + +#: addons/web_calendar/static/src/xml/web_calendar.xml:0 +msgid " " +msgstr " " diff --git a/addons/web_calendar/po/nl_BE.po b/addons/web_calendar/po/nl_BE.po index 158e6d03eca..e3207071823 100644 --- a/addons/web_calendar/po/nl_BE.po +++ b/addons/web_calendar/po/nl_BE.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-07 09:05+0000\n" "Last-Translator: Niels Huylebroeck \n" "Language-Team: Dutch (Belgium) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/pt.po b/addons/web_calendar/po/pt.po index a2ba6e02a2a..e368df937ad 100644 --- a/addons/web_calendar/po/pt.po +++ b/addons/web_calendar/po/pt.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-21 21:57+0000\n" "Last-Translator: Daniel Reis \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-22 05:13+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/ru.po b/addons/web_calendar/po/ru.po new file mode 100644 index 00000000000..ce68bf93983 --- /dev/null +++ b/addons/web_calendar/po/ru.po @@ -0,0 +1,30 @@ +# Russian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-02 07:07+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" + +#: addons/web_calendar/static/src/xml/web_calendar.xml:0 +msgid " " +msgstr "" diff --git a/addons/web_calendar/po/sk.po b/addons/web_calendar/po/sk.po index 2beb26d4e0e..61a75142902 100644 --- a/addons/web_calendar/po/sk.po +++ b/addons/web_calendar/po/sk.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-23 14:42+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/sl.po b/addons/web_calendar/po/sl.po index 0f4b85d1fba..a3ae1e44b67 100644 --- a/addons/web_calendar/po/sl.po +++ b/addons/web_calendar/po/sl.po @@ -7,15 +7,23 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-19 06:26+0000\n" "Last-Translator: Anze (Neotek) \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " diff --git a/addons/web_calendar/po/uk.po b/addons/web_calendar/po/uk.po new file mode 100644 index 00000000000..9cb7cae4797 --- /dev/null +++ b/addons/web_calendar/po/uk.po @@ -0,0 +1,30 @@ +# Ukrainian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-07 16:53+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-08 06:06+0000\n" +"X-Generator: Launchpad (build 14443)\n" + +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" + +#: addons/web_calendar/static/src/xml/web_calendar.xml:0 +msgid " " +msgstr "" diff --git a/addons/web_calendar/po/web_calendar.pot b/addons/web_calendar/po/web_calendar.pot index 9974931bcd3..1e431ffe6e9 100644 --- a/addons/web_calendar/po/web_calendar.pot +++ b/addons/web_calendar/po/web_calendar.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2011-10-07 10:38+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,6 +17,14 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Generated-By: Babel 0.9.6\n" +#: addons/web_calendar/static/src/js/calendar.js:409 +msgid "Responsible" +msgstr "" + +#: addons/web_calendar/static/src/js/calendar.js:438 +msgid "Navigator" +msgstr "" + #: addons/web_calendar/static/src/xml/web_calendar.xml:0 msgid " " msgstr "" diff --git a/addons/web_calendar/static/src/js/calendar.js b/addons/web_calendar/static/src/js/calendar.js index 93e798ba804..75b168ccf5a 100644 --- a/addons/web_calendar/static/src/js/calendar.js +++ b/addons/web_calendar/static/src/js/calendar.js @@ -246,44 +246,75 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({ var self = this, data = this.get_event_data(event_obj); this.dataset.create(data, function(r) { - var id = parseInt(r.result, 10); + var id = r.result; self.dataset.ids.push(id); scheduler.changeEventId(event_id, id); self.refresh_minical(); }, function(r, event) { - self.creating_event_id = event_id; - self.form_dialog.form.on_record_loaded(data); - self.form_dialog.open(); event.preventDefault(); + self.do_create_event_with_formdialog(event_id, event_obj); + }); + }, + do_create_event_with_formdialog: function(event_id, event_obj) { + if (!event_obj) { + event_obj = scheduler.getEvent(event_id); + } + var self = this, + data = this.get_event_data(event_obj), + form = self.form_dialog.form, + fields_to_fetch = _(form.fields_view.fields).keys(); + this.dataset.index = null; + self.creating_event_id = event_id; + this.form_dialog.form.do_show().then(function() { + form.show_invalid = false; + _.each(['date_start', 'date_stop', 'date_delay'], function(field) { + var field_name = self[field]; + if (field_name) { + field = form.fields[field_name]; + field.set_value(data[field_name]); + field.dirty = true; + form.do_onchange(field); + } + }); + form.show_invalid = true; + self.form_dialog.open(); }); }, do_save_event: function(event_id, event_obj) { var self = this, - data = this.get_event_data(event_obj); - this.dataset.write(parseInt(event_id, 10), data, {}, function() { - self.refresh_minical(); - }); + data = this.get_event_data(event_obj), + index = this.dataset.get_id_index(event_id); + if (index != null) { + this.dataset.write(event_id, data, {}, function() { + self.refresh_minical(); + }); + } }, do_delete_event: function(event_id, event_obj) { - var self = this; // dhtmlx sends this event even when it does not exist in openerp. // Eg: use cancel in dhtmlx new event dialog - if (_.indexOf(this.dataset.ids, parseInt(event_id, 10)) > -1) { - this.dataset.unlink(parseInt(event_id, 10), function() { + var self = this, + index = this.dataset.get_id_index(event_id); + if (index !== null) { + this.dataset.unlink(event_id, function() { self.refresh_minical(); }); } }, do_edit_event: function(event_id) { var self = this; - event_id = parseInt(event_id, 10); - var index = _.indexOf(this.dataset.ids, event_id); - if (index > -1) { + var index = this.dataset.get_id_index(event_id); + if (index !== null) { this.dataset.index = index; this.form_dialog.form.do_show().then(function() { self.form_dialog.open(); }); return false; + } else if (scheduler.getState().mode === 'month') { + this.do_create_event_with_formdialog(event_id); + // TODO: check dhtmlxscheduler problem here. At this line, scheduler + // event 'onEventChanged' bound to this.do_save_event() won't be fired !; + return false; } return true; }, diff --git a/addons/web_chat/__openerp__.py b/addons/web_chat/__openerp__.py index f0525bcadad..109fe54f345 100644 --- a/addons/web_chat/__openerp__.py +++ b/addons/web_chat/__openerp__.py @@ -1,6 +1,10 @@ { "name": "Web Chat", - "category" : "Hidden", + "category": "Hidden", + "description": + """ + OpenERP Web chat module. + """, "version": "2.0", "depends": ['web'], "js": [ diff --git a/addons/web_chat/po/web_chat.pot b/addons/web_chat/po/web_chat.pot index 48ad2bfed89..b5b0239b506 100644 --- a/addons/web_chat/po/web_chat.pot +++ b/addons/web_chat/po/web_chat.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/addons/web_dashboard/__openerp__.py b/addons/web_dashboard/__openerp__.py index 68c73731c71..5f8be2b4e51 100644 --- a/addons/web_dashboard/__openerp__.py +++ b/addons/web_dashboard/__openerp__.py @@ -1,6 +1,10 @@ { "name": "web Dashboard", - "category" : "Hidden", + "category": "Hidden", + "description": + """ + OpenERP Web dashboard view. + """, "version": "2.0", "depends": ['web'], "js": [ diff --git a/addons/web_dashboard/po/ar.po b/addons/web_dashboard/po/ar.po index 2c5b34384e5..16936dd5a2b 100644 --- a/addons/web_dashboard/po/ar.po +++ b/addons/web_dashboard/po/ar.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-03 15:09+0000\n" "Last-Translator: kifcaliph \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "إستعادة" msgid "Undo" msgstr "تراجع" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "أضف أداة" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "تغيير المخطط" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "اختر مخطط للعرض" @@ -44,3 +44,29 @@ msgstr "التقدم:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/bn.po b/addons/web_dashboard/po/bn.po new file mode 100644 index 00000000000..c5cb864b9ff --- /dev/null +++ b/addons/web_dashboard/po/bn.po @@ -0,0 +1,72 @@ +# Bengali translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-11-24 12:53+0000\n" +"Last-Translator: nasir khan saikat \n" +"Language-Team: Bengali \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Reset" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Undo" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Change layout" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose dashboard layout" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "progress:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "%" +msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/da.po b/addons/web_dashboard/po/da.po index d7de581fb02..3f6a09dac21 100644 --- a/addons/web_dashboard/po/da.po +++ b/addons/web_dashboard/po/da.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-11 13:59+0000\n" "Last-Translator: Jonas Mortensen \n" "Language-Team: Danish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Nulstil" msgid "Undo" msgstr "Fortryd" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Tilføj widget" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Skift layout" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Vælg layout for kontrolpanel" @@ -44,3 +44,29 @@ msgstr "fremskridt:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/de.po b/addons/web_dashboard/po/de.po index 67a6b680ed5..45ba4322657 100644 --- a/addons/web_dashboard/po/de.po +++ b/addons/web_dashboard/po/de.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-10 12:38+0000\n" "Last-Translator: Felix Schubert \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Zurücksetzen" msgid "Undo" msgstr "Rückgängig" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Widget hinzufügen" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Layout wechseln" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Wählen Sie das Dashboard Layout" @@ -44,3 +44,29 @@ msgstr "Fortschritt:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/es.po b/addons/web_dashboard/po/es.po index 14e8f725d7a..785e8c1a0a1 100644 --- a/addons/web_dashboard/po/es.po +++ b/addons/web_dashboard/po/es.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-18 10:44+0000\n" "Last-Translator: Amós Oviedo \n" "Language-Team: Spanish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Reiniciar" msgid "Undo" msgstr "Deshacer" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Añadir Widget" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Cambiar disposición" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Cambiar disposición del tablero" @@ -44,3 +44,29 @@ msgstr "progreso:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/es_EC.po b/addons/web_dashboard/po/es_EC.po index 23c5bdac2c8..02917d9d6ce 100644 --- a/addons/web_dashboard/po/es_EC.po +++ b/addons/web_dashboard/po/es_EC.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-07 15:56+0000\n" "Last-Translator: Cristian Salamea (Gnuthink) \n" "Language-Team: Spanish (Ecuador) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Reset" msgid "Undo" msgstr "Deshacer" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Agregar Widget" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Cambiar disposición" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Elegir el diseño del panel de control" @@ -44,3 +44,29 @@ msgstr "progreso:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/et.po b/addons/web_dashboard/po/et.po index 55560d7a569..9970424d0bf 100644 --- a/addons/web_dashboard/po/et.po +++ b/addons/web_dashboard/po/et.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-10 19:29+0000\n" "Last-Translator: Aare Vesi \n" "Language-Team: Estonian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -26,11 +26,11 @@ msgid "Undo" msgstr "Ennista" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" +msgid "Change layout" msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Change layout" +msgid " " msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 @@ -44,3 +44,29 @@ msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/fr.po b/addons/web_dashboard/po/fr.po index 47dc7096e90..c461e125d45 100644 --- a/addons/web_dashboard/po/fr.po +++ b/addons/web_dashboard/po/fr.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-23 12:11+0000\n" "Last-Translator: Xavier (Open ERP) \n" "Language-Team: French \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "" msgid "Undo" msgstr "Annuler" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Ajouter un Gadget" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Changer la mise en page" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Choisissez la mise en page du tableau de bord" @@ -44,3 +44,29 @@ msgstr "progrès" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/gl.po b/addons/web_dashboard/po/gl.po index f92e878a783..ace43af3fcc 100644 --- a/addons/web_dashboard/po/gl.po +++ b/addons/web_dashboard/po/gl.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-19 10:29+0000\n" "Last-Translator: Amós Oviedo \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Reiniciar" msgid "Undo" msgstr "Desfacer" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Engadir un widget" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Cambiar disposición" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Cambiar disposición do taboleiro" @@ -44,3 +44,29 @@ msgstr "progreso:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/hr.po b/addons/web_dashboard/po/hr.po new file mode 100644 index 00000000000..ffc5b1f3658 --- /dev/null +++ b/addons/web_dashboard/po/hr.po @@ -0,0 +1,72 @@ +# Croatian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-11-28 12:07+0000\n" +"Last-Translator: Goran Kliska \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Reset" +msgstr "Vrati izvorno" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Undo" +msgstr "Vrati" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Change layout" +msgstr "Promijeni raspored" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose dashboard layout" +msgstr "Odaberi raspored" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "progress:" +msgstr "napredak:" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "%" +msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/it.po b/addons/web_dashboard/po/it.po index 6c190ad89e5..2ef8ffb41fe 100644 --- a/addons/web_dashboard/po/it.po +++ b/addons/web_dashboard/po/it.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-07 09:00+0000\n" "Last-Translator: Davide Corio - agilebg.com \n" "Language-Team: Italian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Ripristina" msgid "Undo" msgstr "Annulla" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Aggiungi Widget" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Cambia layout" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Scegli layout dashboard" @@ -44,3 +44,29 @@ msgstr "avanzamento:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/nl.po b/addons/web_dashboard/po/nl.po new file mode 100644 index 00000000000..8c7780a0ee6 --- /dev/null +++ b/addons/web_dashboard/po/nl.po @@ -0,0 +1,74 @@ +# Dutch translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-06 11:44+0000\n" +"Last-Translator: Douwe Wullink (Dypalio) \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-07 05:25+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Reset" +msgstr "Reset" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Undo" +msgstr "Ongedaan maken" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Change layout" +msgstr "Layout wijzigen" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr " " + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose dashboard layout" +msgstr "Kies dashboard layout" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "progress:" +msgstr "voortgang:" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "%" +msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" +"Klink op de onderstaande functionaliteiten om ze de starten en uw systeem te " +"configureren" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "Welkom bij uw nieuwe OpenERP versie." + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "Vergeet niet een bladwijzer te maken van deze pagina" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "Onthoudt uw login:" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "Kies de eerste OpenERP applicatie die u wilt installeren.." + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "Installeren" diff --git a/addons/web_dashboard/po/nl_BE.po b/addons/web_dashboard/po/nl_BE.po index 15d871f19a1..fc5be0e785e 100644 --- a/addons/web_dashboard/po/nl_BE.po +++ b/addons/web_dashboard/po/nl_BE.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-07 09:04+0000\n" "Last-Translator: Niels Huylebroeck \n" "Language-Team: Dutch (Belgium) \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Reset" msgid "Undo" msgstr "Ongedaan maken" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Widget toevoegen" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Layout aanpassen" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Dashboard layout kiezen" @@ -44,3 +44,29 @@ msgstr "vooruitgang:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/pl.po b/addons/web_dashboard/po/pl.po index d5928814062..cb9aada7dcd 100644 --- a/addons/web_dashboard/po/pl.po +++ b/addons/web_dashboard/po/pl.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-11-04 16:28+0000\n" "Last-Translator: Grzegorz Grzelak (OpenGLOBE.pl) \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Przywróć" msgid "Undo" msgstr "Cofnij" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Dodaj kontrolkę" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Zmień układ" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Wybierz układ konsoli" @@ -44,3 +44,29 @@ msgstr "postęp:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/ru.po b/addons/web_dashboard/po/ru.po new file mode 100644 index 00000000000..7820b9547a9 --- /dev/null +++ b/addons/web_dashboard/po/ru.po @@ -0,0 +1,72 @@ +# Russian translation for openerp-web +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openerp-web package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openerp-web\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" +"PO-Revision-Date: 2011-12-02 07:09+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Reset" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Undo" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Change layout" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose dashboard layout" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "progress:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "%" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/sk.po b/addons/web_dashboard/po/sk.po index cabce5bf3fa..e0a9f2033e2 100644 --- a/addons/web_dashboard/po/sk.po +++ b/addons/web_dashboard/po/sk.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-23 14:45+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Slovak \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -26,11 +26,11 @@ msgid "Undo" msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" +msgid "Change layout" msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Change layout" +msgid " " msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 @@ -44,3 +44,29 @@ msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/sl.po b/addons/web_dashboard/po/sl.po index f0f5cefa43c..417f1d3d78a 100644 --- a/addons/web_dashboard/po/sl.po +++ b/addons/web_dashboard/po/sl.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: openerp-web\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: 2011-10-19 06:25+0000\n" "Last-Translator: Anze (Neotek) \n" "Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-11-21 05:50+0000\n" -"X-Generator: Launchpad (build 14299)\n" +"X-Launchpad-Export-Date: 2011-12-06 05:59+0000\n" +"X-Generator: Launchpad (build 14435)\n" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Reset" @@ -25,14 +25,14 @@ msgstr "Ponastavi" msgid "Undo" msgstr "Razveljavi" -#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" -msgstr "Dodaj gradnik" - #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Change layout" msgstr "Spreminjanje postavitve" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid " " +msgstr "" + #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "Choose dashboard layout" msgstr "Izberite postavitev nadzorne plošče" @@ -44,3 +44,29 @@ msgstr "napredek:" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 msgid "%" msgstr "%" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure your " +"system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" diff --git a/addons/web_dashboard/po/web_dashboard.pot b/addons/web_dashboard/po/web_dashboard.pot index 1c6f145c71c..7b02d91af36 100644 --- a/addons/web_dashboard/po/web_dashboard.pot +++ b/addons/web_dashboard/po/web_dashboard.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PROJECT VERSION\n" "Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2011-10-07 10:39+0200\n" +"POT-Creation-Date: 2011-12-05 11:50+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -26,11 +26,11 @@ msgid "Undo" msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Add Widget" +msgid "Change layout" msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 -msgid "Change layout" +msgid " " msgstr "" #: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 @@ -45,3 +45,29 @@ msgstr "" msgid "%" msgstr "" +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "" +"Click on the functionalites listed below to launch them and configure " +"your system" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Welcome to your new OpenERP instance." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember to bookmark this page." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Remember your login:" +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Choose the first OpenERP Application you want to install.." +msgstr "" + +#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0 +msgid "Install" +msgstr "" + diff --git a/addons/web_dashboard/static/src/css/dashboard.css b/addons/web_dashboard/static/src/css/dashboard.css index 54b1cc7d2b5..d3e05cc4e3b 100644 --- a/addons/web_dashboard/static/src/css/dashboard.css +++ b/addons/web_dashboard/static/src/css/dashboard.css @@ -3,7 +3,7 @@ } .openerp .oe-dashboard-links { text-align: right; - margin: -2em 0.4em 1em 0; + margin: 0 4px 6px 0; } .openerp .oe-dashboard-action { margin: 0 0.5em 0.5em 0; @@ -169,6 +169,11 @@ text-transform: uppercase; margin: 0 0 0.5em 0; } +.openerp .oe-dashboard-config-overview .oe-config-tip { + color: #222; + text-shadow: #eee 0 1px 0; + text-align: center; +} .openerp .oe-dashboard-config-overview dt { font-weight: bold; text-transform: uppercase; diff --git a/addons/web_dashboard/static/src/img/installer_account_accountant.png b/addons/web_dashboard/static/src/img/installer_account_accountant.png new file mode 100644 index 00000000000..5cae206d4e5 Binary files /dev/null and b/addons/web_dashboard/static/src/img/installer_account_accountant.png differ diff --git a/addons/web_dashboard/static/src/js/dashboard.js b/addons/web_dashboard/static/src/js/dashboard.js index 157abb3e7ba..07c9f83ef1f 100644 --- a/addons/web_dashboard/static/src/js/dashboard.js +++ b/addons/web_dashboard/static/src/js/dashboard.js @@ -24,9 +24,7 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ }).disableSelection().bind('sortstop', self.do_save_dashboard); // Events - this.$element.find('.oe-dashboard-link-undo').click(this.on_undo); this.$element.find('.oe-dashboard-link-reset').click(this.on_reset); - this.$element.find('.oe-dashboard-link-add_widget').click(this.on_add_widget); this.$element.find('.oe-dashboard-link-change_layout').click(this.on_change_layout); this.$element.delegate('.oe-dashboard-column .oe-dashboard-fold', 'click', this.on_fold_action); @@ -34,24 +32,19 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ this.actions_attrs = {}; // Init actions - _.each(this.node.children, function(column) { - _.each(column.children, function(action) { + _.each(this.node.children, function(column, column_index) { + _.each(column.children, function(action, action_index) { delete(action.attrs.width); delete(action.attrs.height); delete(action.attrs.colspan); self.actions_attrs[action.attrs.name] = action.attrs; self.rpc('/web/action/load', { action_id: parseInt(action.attrs.name, 10) - }, self.on_load_action); + }, function(result) { + self.on_load_action(result, column_index + '_' + action_index); + }); }); }); - - //this.$element.find('a.oe-dashboard-action-rename').live('click', this.on_rename); - }, - on_undo: function() { - this.rpc('/web/view/undo_custom', { - view_id: this.view.fields_view.view_id - }, this.do_reload); }, on_reset: function() { this.rpc('/web/view/undo_custom', { @@ -59,85 +52,6 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ reset: true }, this.do_reload); }, - on_add_widget: function() { - var self = this; - var action_manager = new openerp.web.ActionManager(this); - var dialog = new openerp.web.Dialog(this, { - title : 'Actions', - width: 800, - height: 600, - buttons : { - Cancel : function() { - $(this).dialog('destroy'); - }, - Add : function() { - self.do_add_widget(action_manager.inner_viewmanager.views.list.controller); - $(this).dialog('destroy'); - } - } - }).start().open(); - action_manager.appendTo(dialog.$element); - action_manager.do_action({ - res_model : 'ir.actions.actions', - views : [[false, 'list']], - type : 'ir.actions.act_window', - limit : 80, - auto_search : true, - flags : { - sidebar : false, - views_switcher : false, - action_buttons : false - } - }); - // TODO: should bind ListView#select_record in order to catch record clicking - }, - do_add_widget : function(listview) { - var self = this, - actions = listview.groups.get_selection().ids, - results = [], - qdict = { view : this.view }; - // TODO: should load multiple actions at once - _.each(actions, function(aid) { - self.rpc('/web/action/load', { - action_id: aid - }, function(result) { - self.actions_attrs[aid] = { - name: aid, - string: _.str.trim(result.result.name) - }; - qdict.action = { - attrs : self.actions_attrs[aid] - }; - self.$element.find('.oe-dashboard-column:first').prepend(QWeb.render('DashBoard.action', qdict)); - self.do_save_dashboard(); - self.on_load_action(result) - }); - }); - }, - on_rename : function(e) { - var self = this, - id = parseInt($(e.currentTarget).parents('.oe-dashboard-action:first').attr('data-id'), 10), - $header = $(e.currentTarget).parents('.oe-dashboard-action-header:first'), - $rename = $header.find('a.oe-dashboard-action-rename').hide(), - $title = $header.find('span.oe-dashboard-action-title').hide(), - $input = $header.find('input[name=title]'); - $input.val($title.text()).show().focus().bind('keydown', function(e) { - if (e.which == 13 || e.which == 27) { - if (e.which == 13) { //enter - var val = $input.val(); - if (!val) { - return false; - } - $title.text(val); - self.actions_attrs[id].string = val; - self.do_save_dashboard(); - } - $input.unbind('keydown').hide(); - $rename.show(); - $title.show(); - } - }); - }, on_change_layout: function() { var self = this; var qdict = { @@ -191,8 +105,10 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ this.do_save_dashboard(); }, on_close_action: function(e) { - $(e.currentTarget).parents('.oe-dashboard-action:first').remove(); - this.do_save_dashboard(); + if (confirm("Are you sure you want to remove this item ?")) { + $(e.currentTarget).parents('.oe-dashboard-action:first').remove(); + this.do_save_dashboard(); + } }, do_save_dashboard: function() { var self = this; @@ -204,8 +120,17 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ this.$element.find('.oe-dashboard-column').each(function() { var actions = []; $(this).find('.oe-dashboard-action').each(function() { - var action_id = $(this).attr('data-id'); - actions.push(self.actions_attrs[action_id]); + var action_id = $(this).attr('data-id'), + new_attrs = _.clone(self.actions_attrs[action_id]); + if (new_attrs.domain) { + new_attrs.domain = new_attrs.domain_string; + delete(new_attrs.domain_string); + } + if (new_attrs.context) { + new_attrs.context = new_attrs.context_string; + delete(new_attrs.context_string); + } + actions.push(new_attrs); }); board.columns.push(actions); }); @@ -214,22 +139,20 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ view_id: this.view.fields_view.view_id, arch: arch }, function() { - self.$element.find('.oe-dashboard-link-undo, .oe-dashboard-link-reset').show(); + self.$element.find('.oe-dashboard-link-reset').show(); }); }, - on_load_action: function(result) { + on_load_action: function(result, index) { var self = this, action = result.result, action_attrs = this.actions_attrs[action.id], view_mode = action_attrs.view_mode; - // TODO: Use xmo's python evaluator when ready if (action_attrs.context) { - action.context = _.extend(action.context || {}, action_attrs.context); + action.context = action_attrs.context; } if (action_attrs.domain) { - action.domain = action.domain || []; - action.domain.push.apply(action.domain, action_attrs.domain); + action.domain = action_attrs.domain; } var action_orig = _.extend({}, action); @@ -261,7 +184,7 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({ }; var am = new openerp.web.ActionManager(this); this.action_managers.push(am); - am.appendTo($("#"+this.view.element_id + '_action_' + action.id)); + am.appendTo($('#' + this.view.element_id + '_action_' + index)); am.do_action(action); am.do_action = function(action) { self.do_action(action); @@ -452,25 +375,18 @@ openerp.web_dashboard.apps = { openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({ template: 'ApplicationTiles', start: function () { - var self = this; this._super(); - // Check for installed application - var Installer = new openerp.web.DataSet(this, 'base.setup.installer'); - Installer.call('default_get', [], function (installed_modules) { - var installed = _(installed_modules).any(function (active, name) { - return _.str.startsWith(name, 'cat') && active; }); - - if(installed) { - self.do_display_root_menu(); - } else { - self.do_display_installer(); - } - }); + $('.secondary_menu', this.$element.closest('.openerp')).hide(); + return this.do_display_root_menu(); + }, + stop: function () { + $('.secondary_menu', this.$element.closest('.openerp')).show(); + this._super(); }, do_display_root_menu: function() { var self = this; - var dss = new openerp.web.DataSetSearch( this, 'ir.ui.menu', null, [['parent_id', '=', false]]); - var r = dss.read_slice( ['name', 'web_icon_data', 'web_icon_hover_data'], {}, function (applications) { + return new openerp.web.DataSetSearch( this, 'ir.ui.menu', null, [['parent_id', '=', false]]) + .read_slice( ['name', 'web_icon_data', 'web_icon_hover_data'], {}, function (applications) { // Create a matrix of 3*x applications var rows = []; while (applications.length) { @@ -483,49 +399,6 @@ openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({ openerp.webclient.menu.on_menu_click(null, $(this).data('menuid')) }); }); - return r; - }, - do_display_installer: function() { - var self = this; - var render_ctx = { - url: window.location.protocol + '//' + window.location.host + window.location.pathname, - session: self.session, - rows: openerp.web_dashboard.apps.applications - }; - var installer = QWeb.render('StaticHome', render_ctx); - self.$element.append(installer); - this.$element.delegate('.oe-static-home-tile-text button', 'click', function () { - self.install_module($(this).val()); - }); - }, - install_module: function (module_name) { - var self = this; - var Modules = new openerp.web.DataSetSearch( - this, 'ir.module.module', null, - [['name', '=', module_name], ['state', '=', 'uninstalled']]); - var Upgrade = new openerp.web.DataSet(this, 'base.module.upgrade'); - - $.blockUI(); - Modules.read_slice(['id'], {}, function (records) { - if (!(records.length === 1)) { $.unblockUI(); return; } - Modules.call('state_update', - [_.pluck(records, 'id'), 'to install', ['uninstalled']], - function () { - Upgrade.call('upgrade_module', [[]], function () { - self.run_configuration_wizards(); - }); - } - ) - }); - }, - run_configuration_wizards: function () { - var self = this; - new openerp.web.DataSet(this, 'res.config').call('start', [[]], function (action) { - $.unblockUI(); - self.widget_parent.widget_parent.do_action(action, function () { - openerp.webclient.do_reload(); - }); - }); } }); diff --git a/addons/web_dashboard/static/src/xml/web_dashboard.xml b/addons/web_dashboard/static/src/xml/web_dashboard.xml index 72f418ebbad..038bccd606a 100644 --- a/addons/web_dashboard/static/src/xml/web_dashboard.xml +++ b/addons/web_dashboard/static/src/xml/web_dashboard.xml @@ -5,14 +5,6 @@ Reset - -