def preferred_language_locale_negotiator(request): """ A pyramid locale negotiator that piggybacks off the preferred language support. We return a valid locale name consisting of at most language-territory, but at least language. A valid locale is one for which we have available locale data, not necessarily one for which any translation data is available. """ # pylint:disable=too-many-function-args, assignment-from-no-return # This code is similar to that in zope.publisher.http.HTTPRequest. # it's point is to find the most specific available locale possible. # We differ in that, instead of returning a generic default, we # specifically return the english default. We also differ in that we # return a locale name instead of a locale object. result = EnglishUserPreferredLanguagesImpl.PREFERRED_LANGUAGES[0] pref_langs = IUserPreferredLanguages(request, ()) if pref_langs: pref_langs = pref_langs.getPreferredLanguages() for lang in pref_langs: parts = (lang.split('-') + [None, None])[:3] try: locales.getLocale(*parts) result = lang break except LoadLocaleError: # pragma: no cover continue return result
def get_locale_dates(request=_marker, locale=_marker): """Return the date formatter given the request. """ local_info = locale if local_info is _marker: local_info = get_locale_info(request) try: return locales.getLocale(*local_info.split('-')).dates except LoadLocaleError: return locales.getLocale('en').dates
def get_locale(request): """Adapts request to ILocale based on preferred language. Under the hood a call to IUserPreferredLanguages will help decide language. """ langs = IUserPreferredLanguages(request).getPreferredLanguages() if not langs or langs[0] == '': return locales.getLocale(None, None, None) else: parts = (langs[0].split('-') + [None, None])[:3] return locales.getLocale(*parts)
def __init__(self, body_instream=None, environ=None, form=None, skin=None, outstream=None, **kw): _testEnv = { 'SERVER_URL': 'http://127.0.0.1', 'HTTP_HOST': '127.0.0.1', 'CONTENT_LENGTH': '0', 'GATEWAY_INTERFACE': 'TestFooInterface/1.0', } if environ is not None: # BBB: This is backward-compatibility support for the deprecated # output stream. try: environ.get except AttributeError: import warnings warnings.warn("Can't pass output streams to requests anymore. " "This will go away in Zope 3.4.", DeprecationWarning, 2) environ, form, skin, outstream = form, skin, outstream, environ _testEnv.update(environ) if kw: _testEnv.update(kw) if body_instream is None: from StringIO import StringIO body_instream = StringIO('') super(TestRequest, self).__init__(body_instream, _testEnv) if form: self.form.update(form) # Setup locale object langs = BrowserLanguages(self).getPreferredLanguages() from zope.i18n.locales import locales if not langs or langs[0] == '': self._locale = locales.getLocale(None, None, None) else: parts = (langs[0].split('-') + [None, None])[:3] self._locale = locales.getLocale(*parts) if skin is not None: directlyProvides(self, skin) else: directlyProvides(self, IDefaultBrowserLayer) # BBB: Goes away in 3.4. self.response.outstream = outstream
def _get_locales_info(portal): reg = queryUtility(IRegistry, context=portal) language = reg['plone.default_language'] parts = (language.split('-') + [None, None])[:3] try: locale = locales.getLocale(*parts) # If we get a territory, we enable the combined language codes if locale.id.territory: return locale.id.language + '_' + locale.id.territory, True, locale return locale.id.language, False, locale except LoadLocaleError: # default to *some* language so we don't error out return language, False, locales.getLocale('en')
def first_weekday_setup(context): """Set the first day of the week based on the portal's locale. """ reg = getUtility(IRegistry) if reg.get('plone.first_weekday') is not None: # don't overwrite if it's already set return first = 6 try: site = getSite() # find the locale implied by the portal's language language = site.Language() parts = (language.split('-') + [None, None])[:3] locale = locales.getLocale(*parts) # look up first day of week gregorian_calendar = locale.dates.calendars.get(u'gregorian', None) if gregorian_calendar is not None: day = gregorian_calendar.week.get('firstDay', 7) first = 6 if day == 0 else day - 1 except LoadLocaleError: # If we cannot get the locale, just Sunday as first weekday pass # save setting reg['plone.first_weekday'] = first
def first_weekday_setup(context): """Set the first day of the week based on the portal's locale. """ reg = getUtility(IRegistry) settings = reg.forInterface(IEventSettings, prefix="plone.app.event") if settings.first_weekday is not None: # don't overwrite if it's already set return first = 6 try: site = getSite() # find the locale implied by the portal's language language = site.Language() parts = (language.split('-') + [None, None])[:3] locale = locales.getLocale(*parts) # look up first day of week gregorian_calendar = locale.dates.calendars.get(u'gregorian', None) if gregorian_calendar is not None: first = wkday_to_mon0(gregorian_calendar.week.get('firstDay', 7)) except LoadLocaleError: # If we cannot get the locale, just Sunday as first weekday pass # save setting settings.first_weekday = first
def currency_format(context, locale): locale = locales.getLocale(locale) currency = context.bika_setup.getCurrency() symbol = locale.numbers.currencies[currency].symbol def format(val): return '%s %0.2f' % (symbol, val) return format
def locale(self): try: # Country is optional lang_country = get_locale_name(self).split('-') except AttributeError: # Testing, registry has no settings lang_country = ('en', 'US') return locales.getLocale(*lang_country)
def _set_language_de(self): """This Function is used to set the language of the plone site. We need this, because we wan't to make sure that the language is inherited when there isn't one forced. """ locale = locales.getLocale('de') target_language = locale.id.language # If we get a territory, we enable the combined language codes use_combined = False if locale.id.territory: use_combined = True target_language += '_' + locale.id.territory # As we have a sensible language code set now, we disable the # start neutral functionality tool = getToolByName(self.portal, "portal_languages") tool.manage_setLanguageSettings( target_language, [target_language], setUseCombinedLanguageCodes=use_combined, startNeutral=False) transaction.commit()
def folderitems(self): self.categories = [] bsc = getToolByName(self.context, 'bika_setup_catalog') wf = getToolByName(self.context, 'portal_workflow') mtool = getToolByName(self.context, 'portal_membership') member = mtool.getAuthenticatedMember() roles = member.getRoles() self.allow_edit = 'LabManager' in roles or 'Manager' in roles items = BikaListingView.folderitems(self) for x in range(len(items)): if not items[x].has_key('obj'): continue obj = items[x]['obj'] cat = obj.getCategoryTitle() items[x]['category'] = cat if cat not in self.categories: self.categories.append(cat) analyses = [a.UID() for a in self.fieldvalue] items[x]['selected'] = items[x]['uid'] in analyses items[x]['class']['Title'] = 'service_title' calculation = obj.getCalculation() items[x]['Calculation'] = calculation and calculation.Title() locale = locales.getLocale('en') currency = self.context.bika_setup.getCurrency() symbol = locale.numbers.currencies[currency].symbol items[x]['Price'] = "%s %s" % (symbol, obj.getPrice()) items[x]['class']['Price'] = 'nowrap' after_icons = '' if obj.getAccredited(): after_icons += "<img\ src='%s/++resource++bika.lims.images/accredited.png'\ title='%s'>" % (self.context.absolute_url(), _("Accredited")) if obj.getReportDryMatter(): after_icons += "<img\ src='%s/++resource++bika.lims.images/dry.png'\ title='%s'>" % (self.context.absolute_url(), _("Can be reported as dry matter")) if obj.getAttachmentOption() == 'r': after_icons += "<img\ src='%s/++resource++bika.lims.images/attach_reqd.png'\ title='%s'>" % (self.context.absolute_url(), _("Attachment required")) if obj.getAttachmentOption() == 'n': after_icons += "<img\ src='%s/++resource++bika.lims.images/attach_no.png'\ title='%s'>" % (self.context.absolute_url(), _('Attachment not permitted')) if after_icons: items[x]['after']['Title'] = after_icons self.categories.sort() return items
def get_locale(request): """ return locale based on HTTP request header ACCEPT_LANGUAGES. We need languages to get locale, and the locale on the request object gets this wrong (removes territory part of locale). This does essentially what ZPublisher.HTTPRequest does to load a locale, but with a fixed (predictable, correct) adapter. zope.publisher.browser.BrowserLangauges is an adapter with fixed behavior to correctly get languages. Other adapters in Plone packages (e.g. PTSLanguages) may interfere with ZPublisher.HTTPRequest.locales loading territory, so we prefer a fixed adapter rather than an adapter looked-up by registration via IUserPreferredLanguages. """ locale = None languages = BrowserLanguages(request).getPreferredLanguages() for lang in languages: parts = (lang.split('-') + [None, None])[:3] try: locale = locales.getLocale(*parts) break except LoadLocaleError: pass return locale
def get_locale(request): """ return locale based on HTTP request header ACCEPT_LANGUAGES. We need languages to get locale, and the locale on the request object gets this wrong (removes territory part of locale). This does essentially what ZPublisher.HTTPRequest does to load a locale, but with a fixed (predictable, correct) adapter. zope.publisher.browser.BrowserLangauges is an adapter with fixed behavior to correctly get languages. Other adapters in Plone packages (e.g. PTSLanguages) may interfere with ZPublisher.HTTPRequest.locales loading territory, so we prefer a fixed adapter rather than an adapter looked-up by registration via IUserPreferredLanguages. """ locale = None languages = BrowserLanguages(request).getPreferredLanguages() for lang in languages: parts = (lang.split("-") + [None, None])[:3] try: locale = locales.getLocale(*parts) break except LoadLocaleError: pass return locale
def folderitems(self): mtool = getToolByName(self.context, 'portal_membership') member = mtool.getAuthenticatedMember() roles = member.getRoles() self.allow_edit = 'LabManager' in roles or 'Manager' in roles items = BikaListingView.folderitems(self) for x in range(len(items)): if not items[x].has_key('obj'): continue obj = items[x]['obj'] cat = obj.getCategoryTitle() # Category (upper C) is for display column value items[x]['Category'] = cat if self.do_cats: # category is for bika_listing to groups entries items[x]['category'] = cat if cat not in self.categories: self.categories.append(cat) analyses = [a.UID() for a in self.field_value] items[x]['selected'] = items[x]['uid'] in analyses items[x]['class']['Title'] = 'service_title' calculation = obj.getCalculation() items[x]['Calculation'] = calculation and calculation.Title() locale = locales.getLocale('en') currency = self.context.bika_setup.getCurrency() symbol = locale.numbers.currencies[currency].symbol items[x]['Price'] = "%s %s" % (symbol, obj.getPrice()) items[x]['class']['Price'] = 'nowrap' after_icons = '' if obj.getAccredited(): after_icons += "<img\ src='%s/++resource++bika.lims.images/accredited.png'\ title='%s'>" % (self.context.absolute_url(), _("Accredited")) if obj.getReportDryMatter(): after_icons += "<img\ src='%s/++resource++bika.lims.images/dry.png'\ title='%s'>" % (self.context.absolute_url(), _("Can be reported as dry matter")) if obj.getAttachmentOption() == 'r': after_icons += "<img\ src='%s/++resource++bika.lims.images/attach_reqd.png'\ title='%s'>" % (self.context.absolute_url(), _("Attachment required")) if obj.getAttachmentOption() == 'n': after_icons += "<img\ src='%s/++resource++bika.lims.images/attach_no.png'\ title='%s'>" % (self.context.absolute_url(), _('Attachment not permitted')) if after_icons: items[x]['after']['Title'] = after_icons return items
def get_currency_symbol(self): """Get the currency Symbol """ locale = locales.getLocale('en') setup = api.get_setup() currency = setup.getCurrency() return locale.numbers.currencies[currency].symbol
def getLocale(request): envadapter = IUserPreferredLanguages(request, None) if envadapter is None: return None langs = envadapter.getPreferredLanguages() for httplang in langs: parts = (httplang.split('-') + [None, None])[:3] try: return locales.getLocale(*parts) except LoadLocaleError: # Just try the next combination pass else: # No combination gave us an existing locale, so use the default, # which is guaranteed to exist return locales.getLocale(None, None, None)
def _getLocale(request): envadapter = IUserPreferredLanguages(request, None) if envadapter is None: return None langs = envadapter.getPreferredLanguages() for httplang in langs: parts = (httplang.split('-') + [None, None])[:3] try: return locales.getLocale(*parts) except LoadLocaleError: # Just try the next combination pass else: # No combination gave us an existing locale, so use the default, # which is guaranteed to exist return locales.getLocale(None, None, None)
def __call__(self, context): items = [] currencies = locales.getLocale('zh','cn').numbers.currencies.values() currencies.sort(lambda x,y:cmp(x.displayName, y.displayName)) for c in currencies: items.append(SimpleVocabulary.createTerm( c.type, c.type, "%s (%s)" % (c.displayName, c.symbol))) return SimpleVocabulary(items)
def get_currency_symbol(self): """Returns the locale currency symbol """ currency = self.context.bika_setup.getCurrency() locale = locales.getLocale("en") locale_currency = locale.numbers.currencies.get(currency) if locale_currency is None: return "$" return locale_currency.symbol
def __call__(self): context = self.context workflow = getToolByName(context, 'portal_workflow') # Gather relted objects batch = context.aq_parent client = context.getClient() analysis_request = context.getAnalysisRequest( ) if context.getAnalysisRequest() else None # Gather general data self.invoiceId = context.getId() self.invoiceDate = self.ulocalized_time(context.getInvoiceDate()) self.subtotal = '%0.2f' % context.getSubtotal() self.VATAmount = '%0.2f' % context.getVATAmount() self.total = '%0.2f' % context.getTotal() # Create the batch range start = self.ulocalized_time(batch.getBatchStartDate()) end = self.ulocalized_time(batch.getBatchEndDate()) self.batchRange = "%s to %s" % (start, end) # Gather client data self.clientName = client.Title() self.clientURL = client.absolute_url() self.clientPhone = client.getPhone() self.clientFax = client.getFax() self.clientEmail = client.getEmailAddress() self.clientAccountNumber = client.getAccountNumber() # currency info locale = locales.getLocale('en') self.currency = self.context.bika_setup.getCurrency() self.symbol = locale.numbers.currencies[self.currency].symbol # Get an available client address in a preferred order self.clientAddress = None # A list with the items and its invoice values to render in template self.items = [] addresses = ( client.getBillingAddress(), client.getPostalAddress(), client.getPhysicalAddress(), ) for address in addresses: if address.get('address'): self.clientAddress = address break # Gather the line items items = context.invoice_lineitems for item in items: invoice_data = { 'invoiceDate': self.ulocalized_time(item.get('ItemDate', '')), 'description': item.get('ItemDescription', ''), 'orderNo': item.get('OrderNumber', ''), 'subtotal': '%0.2f' % item.get('Subtotal', ''), 'VATAmount': '%0.2f' % item.get('VATAmount', ''), 'total': '%0.2f' % item.get('Total', ''), } self.items.append(invoice_data) # Render the template return self.template()
def _get_locales_info(portal): language = portal.Language() parts = (language.split('-') + [None, None])[:3] locale = locales.getLocale(*parts) # If we get a territory, we enable the combined language codes if locale.id.territory: return locale.id.language + '_' + locale.id.territory, True, locale return locale.id.language, False, locale
def _get_locales_info(portal): language = portal.Language() parts = (language.split('-') + [None, None])[:3] locale = locales.getLocale(*parts) # If we get a territory, we enable the combined language codes use_combined = False if locale.id.territory: use_combined = True target_language += '_' + locale.id.territory return locale.id.language, use_combined, locale
def formatDateTime(self, instance, dt): if not dt: return u'' dt = timezoneAdjuster(instance, dt) site = self._site(instance) locale = ILocaleFactory(site) locale = locales.getLocale(locale, locale) if not self.show_hm: return ltimefmt(dt, locale, category="date", length="short") return ltimefmt(dt, locale, category="dateTime", length="short")
def setupLocale(self): envadapter = IUserPreferredLanguages(self, None) if envadapter is None: self._locale = None return langs = envadapter.getPreferredLanguages() for httplang in langs: parts = (httplang.split("-") + [None, None])[:3] try: self._locale = locales.getLocale(*parts) return except LoadLocaleError: # Just try the next combination pass else: # No combination gave us an existing locale, so use the default, # which is guaranteed to exist self._locale = locales.getLocale(None, None, None)
def __call__(self): context = self.context workflow = getToolByName(context, 'portal_workflow') # Gather relted objects batch = context.aq_parent client = context.getClient() analysis_request = context.getAnalysisRequest() if context.getAnalysisRequest() else None # Gather general data self.invoiceId = context.getId() self.invoiceDate = self.ulocalized_time(context.getInvoiceDate()) self.subtotal = '%0.2f' % context.getSubtotal() self.VATAmount = '%0.2f' % context.getVATAmount() self.total = '%0.2f' % context.getTotal() # Create the batch range start = self.ulocalized_time(batch.getBatchStartDate()) end = self.ulocalized_time(batch.getBatchEndDate()) self.batchRange = "%s to %s" % (start, end) # Gather client data self.clientName = client.Title() self.clientURL = client.absolute_url() self.clientPhone = client.getPhone() self.clientFax = client.getFax() self.clientEmail = client.getEmailAddress() self.clientAccountNumber = client.getAccountNumber() # currency info locale = locales.getLocale('en') self.currency = self.context.bika_setup.getCurrency() self.symbol = locale.numbers.currencies[self.currency].symbol # Get an available client address in a preferred order self.clientAddress = None # A list with the items and its invoice values to render in template self.items = [] addresses = ( client.getBillingAddress(), client.getPostalAddress(), client.getPhysicalAddress(), ) for address in addresses: if address.get('address'): self.clientAddress = address break # Gather the line items items = context.invoice_lineitems for item in items: invoice_data = { 'invoiceDate': self.ulocalized_time(item.get('ItemDate', '')), 'description': item.get('ItemDescription', ''), 'orderNo': item.get('OrderNumber', ''), 'subtotal': '%0.2f' % item.get('Subtotal', ''), 'VATAmount': '%0.2f' % item.get('VATAmount', ''), 'total': '%0.2f' % item.get('Total', ''), } self.items.append(invoice_data) # Render the template return self.template()
def setup_language(portal): """When installing plone, the language is set when creating example content. If the content creation profile ``Products.CMFPlone:plone-content`` is not installed, the lanuage is not set up properly. This setup handler allows to only setup the language but not create example content by putting a ``inflator-setup-language.txt`` in a generic setup profile which is used on initialization. The code of this function is copied from ``Products.CMFPlone.setuphandlers.setupPortalContent``. """ language = portal.Language() parts = (language.split('-') + [None, None])[:3] locale = locales.getLocale(*parts) target_language = base_language = locale.id.language # If we get a territory, we enable the combined language codes use_combined = False if locale.id.territory: use_combined = True target_language += '_' + locale.id.territory # As we have a sensible language code set now, we disable the # start neutral functionality tool = getToolByName(portal, "portal_languages") tool.manage_setLanguageSettings(language, [language], setUseCombinedLanguageCodes=use_combined, startNeutral=False) # Set the first day of the week, defaulting to Sunday, as the # locale data doesn't provide a value for English. European # languages / countries have an entry of Monday, though. calendar = getToolByName(portal, "portal_calendar", None) if calendar is not None: first = 6 gregorian = locale.dates.calendars.get(u'gregorian', None) if gregorian is not None: first = gregorian.week.get('firstDay', None) # on the locale object we have: mon : 1 ... sun : 7 # on the calendar tool we have: mon : 0 ... sun : 6 if first is not None: first = first - 1 calendar.firstweekday = first # Enable visible_ids for non-latin scripts # See if we have an url normalizer normalizer = queryUtility(IURLNormalizer, name=target_language) if normalizer is None: normalizer = queryUtility(IURLNormalizer, name=base_language)
def _get_locales_info(portal): reg = queryUtility(IRegistry, context=portal) language = reg['plone.default_language'] parts = (language.split('-') + [None, None])[:3] locale = locales.getLocale(*parts) # If we get a territory, we enable the combined language codes if locale.id.territory: return locale.id.language + '_' + locale.id.territory, True, locale return locale.id.language, False, locale
def __init__(self, body_instream=None, environ=None, form=None, skin=None, **kw): _testEnv = { 'SERVER_URL': 'http://127.0.0.1', 'HTTP_HOST': '127.0.0.1', 'CONTENT_LENGTH': '0', 'GATEWAY_INTERFACE': 'TestFooInterface/1.0', } if environ is not None: _testEnv.update(environ) if kw: _testEnv.update(kw) if body_instream is None: from io import BytesIO body_instream = BytesIO() super(TestRequest, self).__init__(body_instream, _testEnv) if form: self.form.update(form) # Setup locale object langs = BrowserLanguages(self).getPreferredLanguages() from zope.i18n.locales import locales if not langs or langs[0] == '': self._locale = locales.getLocale(None, None, None) else: parts = (langs[0].split('-') + [None, None])[:3] self._locale = locales.getLocale(*parts) if skin is not None: directlyProvides(self, skin) else: directlyProvides(self, IDefaultBrowserLayer)
def setupLocale( self, request ): # slightly adapted from zope.publisher.http.HTTPRequest.setupLocale if getattr( request, 'locale', None) is not None: return envadapter = IUserPreferredLanguages(request, None) if envadapter is None: request.locale = locales.getLocale(None, None, None) return langs = envadapter.getPreferredLanguages() for httplang in langs: parts = (httplang.split('-') + [None, None])[:3] try: request.locale = locales.getLocale(*parts) return except LoadLocaleError: # Just try the next combination pass else: # No combination gave us an existing locale, so use the default, # which is guaranteed to exist request.locale = locales.getLocale(None, None, None)
def setupLocale(self, request): # slightly adapted from zope.publisher.http.HTTPRequest.setupLocale if getattr(request, 'locale', None) is not None: return envadapter = IUserPreferredLanguages(request, None) if envadapter is None: request.locale = locales.getLocale(None, None, None) return langs = envadapter.getPreferredLanguages() for httplang in langs: parts = (httplang.split('-') + [None, None])[:3] try: request.locale = locales.getLocale(*parts) return except LoadLocaleError: # Just try the next combination pass else: # No combination gave us an existing locale, so use the default, # which is guaranteed to exist request.locale = locales.getLocale(None, None, None)
def TestRequest(**kwargs): # pylint: disable=invalid-name """Test request helper""" params = kwargs.get('params') if params: copy = params.__class__() for key, value in params.items(): if key.endswith(':list'): key = key.split(':', 1)[0] copy[key] = value kwargs['params'] = copy request = DummyRequest(**kwargs) request.locale = locales.getLocale('en') apply_skin(request, PYAMS_BASE_SKIN_NAME) return request
def __init__(self, body_instream=None, environ=None, form=None, skin=None, **kw): _testEnv = { "SERVER_URL": "http://127.0.0.1", "HTTP_HOST": "127.0.0.1", "CONTENT_LENGTH": "0", "GATEWAY_INTERFACE": "TestFooInterface/1.0", } if environ is not None: _testEnv.update(environ) if kw: _testEnv.update(kw) if body_instream is None: from StringIO import StringIO body_instream = StringIO("") super(TestRequest, self).__init__(body_instream, _testEnv) if form: self.form.update(form) # Setup locale object langs = BrowserLanguages(self).getPreferredLanguages() from zope.i18n.locales import locales if not langs or langs[0] == "": self._locale = locales.getLocale(None, None, None) else: parts = (langs[0].split("-") + [None, None])[:3] self._locale = locales.getLocale(*parts) if skin is not None: directlyProvides(self, skin) else: directlyProvides(self, IDefaultBrowserLayer)
def __call__(self): context = self.context workflow = getToolByName(context, 'portal_workflow') # Gather relted objects batch = context.aq_parent client = context.getClient() # Gather general data self.invoiceId = context.getId() self.invoiceDate = self.ulocalized_time(context.getInvoiceDate()) self.subtotal = '%0.2f' % context.getSubtotal() self.VATAmount = '%0.2f' % context.getVATAmount() self.total = '%0.2f' % context.getTotal() # Create the batch range start = self.ulocalized_time(batch.getBatchStartDate()) end = self.ulocalized_time(batch.getBatchEndDate()) self.batchRange = "%s to %s" % (start, end) # Gather client data self.clientName = client.Title() self.clientPhone = client.getPhone() self.clientFax = client.getFax() self.clientEmail = client.getEmailAddress() self.clientAccountNumber = client.getAccountNumber() # currency info locale = locales.getLocale('en') self.currency = self.context.bika_setup.getCurrency() self.symbol = locale.numbers.currencies[self.currency].symbol # Get an available client address in a preferred order self.clientAddress = None addresses = ( client.getBillingAddress(), client.getPostalAddress(), client.getPhysicalAddress(), ) for address in addresses: if address.get('address'): self.clientAddress = address break # Gather the line items items = context.invoice_lineitems self.items = [{ 'invoiceDate': self.ulocalized_time(item['ItemDate']), 'description': item['ItemDescription'], 'orderNo': item['OrderNumber'], 'subtotal': item['Subtotal'], 'VATAmount': item['VATAmount'], 'total': item['Total'], } for item in items] # Render the template return self.template()
def folderitem(self, obj, item, index): """Processed once per analysis """ cat = obj.getCategoryTitle() # Category (upper C) is for display column value item["Category"] = cat if self.do_cats: # category is for bika_listing to groups entries item["category"] = cat if cat not in self.categories: self.categories.append(cat) analyses = [a.UID() for a in self.fieldvalue] item["selected"] = item["uid"] in analyses item["class"]["Title"] = "service_title" calculation = obj.getCalculation() item["Calculation"] = calculation and calculation.Title() locale = locales.getLocale("en") currency = self.context.bika_setup.getCurrency() symbol = locale.numbers.currencies[currency].symbol item["Price"] = u"{} {}".format(symbol, obj.getPrice()) item["class"]["Price"] = "nowrap" after_icons = "" if obj.getAccredited(): after_icons += u"<img src='{}/++resource++bika.lims.images/accredited.png' title='{}'>".format( self.context.absolute_url(), _("Accredited")) if obj.getReportDryMatter(): after_icons += u"<img src='{}/++resource++bika.lims.images/dry.png' title='{}'>".format( self.context.absolute_url(), _("Can be reported as dry matter")) if obj.getAttachmentOption() == "r": after_icons += u"<img src='{}/++resource++bika.lims.images/attach_reqd.png' title='{}'>".format( self.context.absolute_url(), _("Attachment required")) if obj.getAttachmentOption() == "n": after_icons += u"<img src='%s/++resource++bika.lims.images/attach_no.png' title='%s'>".format( self.context.absolute_url(), _('Attachment not permitted')) if after_icons: item["after"]["Title"] = after_icons if self.profile: # Display analyses for this Analysis Service in results? ser = self.profile.getAnalysisServiceSettings(obj.UID()) item["allow_edit"] = ["Hidden", ] item["Hidden"] = ser.get("hidden", obj.getHidden()) return item
def setupPortalContent(p): """ Import default plone content """ setupPlonePortalContent(p) language = p.Language() parts = (language.split("-") + [None, None])[:3] locale = locales.getLocale(*parts) target_language = base_language = locale.id.language util = getToolByName(p, "translation_service") # util = queryUtility(ITranslationDomain, 'ploomcake.installer') front_title = ( util and util.translate( u"front-title", "ploomcake.installer", target_language=target_language, context=p, default=front_page.title ) or "Ploomcake" ) front_desc = ( util and util.translate( u"front-description", "ploomcake.installer", target_language=target_language, context=p, default=front_page.desc, ) or "" ) front_text = ( util and util.translate( u"front-text", "ploomcake.installer", target_language=target_language, context=p, default=front_page.text ) or "Congratulations !" ) existing = p.keys() fp = p["front-page"] fp.setTitle(front_title) fp.setDescription(front_desc) fp.setText(front_text, mimetype="text/html") fp.reindexObject()
def test_locale(self): # Set up registry so that no is an accepted language and that the # language information from the request is actually being used. registry = getUtility(IRegistry) settings = registry.forInterface(ILanguageSchema, prefix='plone') settings.use_request_negotiation = True settings.available_languages.append('no') no = locales.getLocale('no', None, None) self.app.REQUEST.set('HTTP_ACCEPT_LANGUAGE', 'no') # Push request through the BeforeTraverseEvent handler again to # update language settings notify(BeforeTraverseEvent(self.portal, self.portal.REQUEST)) self.assertEqual(self.view.locale(), no)
def toLocale(iso): locale = None if ILocale.providedBy(iso): locale = iso else: localeIdentity = None if isinstance(iso, basestring): localeIdentity = parseLocaleIdentity(iso) elif ILocaleIdentity.providedBy(iso): localeIdentity = iso if localeIdentity is not None: locale = locales.getLocale(localeIdentity.language, localeIdentity.territory, localeIdentity.variant) if locale is None: raise TypeError('the argument must be a string, ILocaleIdentity or ILocale') return locale
def hour_time_formatter(self, timeobj): """uses zope.i18n.locales to determine hour/min format """ #grab locale from request languages = IUserPreferredLanguages(self.request) langs = languages.getPreferredLanguages() if langs: parts = (langs[0].split('-') + [None, None])[:3] else: parts = (None, None, None) locale = locales.getLocale(*parts) #create formatted hour minute string formatter = locale.dates.getFormatter('time', 'short') return formatter.format(timeobj)
def hour_time_formatter(self, timeobj): """uses zope.i18n.locales to determine hour/min format """ #grab locale from request languages = IUserPreferredLanguages(self.request) langs = languages.getPreferredLanguages() if langs: parts = (langs[0].split('-') + [None,None])[:3] else: parts = (None,None,None) locale = locales.getLocale(*parts) #create formatted hour minute string formatter = locale.dates.getFormatter('time', 'short') return formatter.format(timeobj)
class TestRootLocale(TestCase): """There were some complaints that the root locale does not work correctly, so make sure it does.""" locales.loadLocale(None, None, None) locale = locales.getLocale(None, None, None) def test_dateFormatter(self): formatter = self.locale.dates.getFormatter('date') self.assertEqual(formatter.format(datetime.date(2004, 10, 31), 'E'), '1') self.assertEqual(formatter.format(datetime.date(2004, 10, 31), 'EE'), '01') self.assertEqual(formatter.format(datetime.date(2004, 10, 31), 'EEE'), '1') self.assertEqual(formatter.format(datetime.date(2004, 10, 31), 'EEEE'), '1')
def getLocaleFormatter( request=None, category="date", # "date" | "time" | "dateTime" length="medium" # "short" | "medium" | "long" | "full" | None ): """See: zope.i18n.locales.LocaleDates.getFormatter """ if request is None: try: request = common.get_request() except NoInteraction: request = None if request and hasattr(request, "locale"): return request.locale.dates.getFormatter(category, length) else: return locales.getLocale(capi.default_language).dates.getFormatter( category, length)
def _convertLanguageToLangCode(self, language): if not language: return "" locale = locales.getLocale('en') lang_in_german = locale.displayNames.languages if not hasattr(self, '_converter'): self._converter = {} util = getUtility(IVocabularyFactory, u"recensio.policy.vocabularies.available_content_languages") vocab = util(self.context) for key, title in [(x.value, lang_in_german[x.value]) for x in vocab]: self._converter[title] = \ key for key, value in self._converter.items(): if key.lower() in language.lower(): return value
def browser_language(self): language = 'en' pl = IUserPreferredLanguages(self.request) if pl is not None: languages = pl.getPreferredLanguages() for httplang in languages: parts = (httplang.split('-') + [None, None])[:3] if parts[0] == parts[1]: # Avoid creating a country code for simple languages codes parts = [parts[0], None, None] try: locale = locales.getLocale(*parts) language = locale.getLocaleID().replace('_', '-').lower() break except LoadLocaleError: # Just try the next combination pass return language
class TestLocaleAndProvider(TestCase): # Set the locale on the class so that test cases don't have # to pay to construct a new one each time. locales.loadLocale(None, None, None) locales.loadLocale('en', None, None) locales.loadLocale('en', 'US', None) locales.loadLocale('en', 'US', 'POSIX') locale = locales.getLocale('en', 'US', 'POSIX') def test_getTimeFormatter(self): formatter = self.locale.dates.getFormatter('time', 'medium') self.assertEqual(formatter.getPattern(), 'h:mm:ss a') self.assertEqual(formatter.format(datetime.time(12, 30, 10)), '12:30:10 PM') self.assertEqual(formatter.parse('12:30:10 PM'), datetime.time(12, 30, 10)) def test_getDateFormatter(self): formatter = self.locale.dates.getFormatter('date', 'medium') self.assertEqual(formatter.getPattern(), 'MMM d, yyyy') self.assertEqual(formatter.format(datetime.date(2003, 1, 2)), 'Jan 2, 2003') self.assertEqual(formatter.parse('Jan 2, 2003'), datetime.date(2003, 1, 2)) def test_getDateTimeFormatter(self): formatter = self.locale.dates.getFormatter('dateTime', 'medium') self.assertEqual(formatter.getPattern(), 'MMM d, yyyy h:mm:ss a') self.assertEqual( formatter.format(datetime.datetime(2003, 1, 2, 12, 30)), 'Jan 2, 2003 12:30:00 PM') self.assertEqual(formatter.parse('Jan 2, 2003 12:30:00 PM'), datetime.datetime(2003, 1, 2, 12, 30)) def test_getNumberFormatter(self): formatter = self.locale.numbers.getFormatter('decimal') self.assertEqual(formatter.getPattern(), '###0.###;-###0.###') self.assertEqual(formatter.format(1234.5678), '1234.568') self.assertEqual(formatter.format(-1234.5678), '-1234.568') self.assertEqual(formatter.parse('1234.567'), 1234.567) self.assertEqual(formatter.parse('-1234.567'), -1234.567)
def translation_status(self): if ITranslatable.providedBy(self.context) and len(capi.pivot_languages): untranslated = list(capi.pivot_languages) if self.context.language in untranslated: untranslated.remove(self.context.language) for pivot_lang in untranslated: if translation.get_field_translations(self.context, pivot_lang): untranslated.remove(pivot_lang) if len(untranslated): i18n_langs = [] locale = locales.getLocale(get_default_language().split("-")[0], None) for lang in untranslated: if locale and locale.displayNames and locale.displayNames.languages: i18n_langs.append(locale.displayNames.languages.get(lang, lang)) continue i18n_langs.append(lang) return ", ".join(i18n_langs) return translate(_("translated"), context=get_request()) return translate("n/a", context=get_request())
def setupPortalContent(p): """ Import default plone content """ setupPlonePortalContent(p) language = p.Language() parts = (language.split('-') + [None, None])[:3] locale = locales.getLocale(*parts) target_language = base_language = locale.id.language util = getToolByName(p, 'translation_service') # util = queryUtility(ITranslationDomain, 'ploomcake.installer') front_title = util and util.translate( u'front-title', 'ploomcake.installer', target_language=target_language, context=p, default=front_page.title) or 'Ploomcake' front_desc = util and util.translate(u'front-description', 'ploomcake.installer', target_language=target_language, context=p, default=front_page.desc) or '' front_text = util and util.translate( u'front-text', 'ploomcake.installer', target_language=target_language, context=p, default=front_page.text) or 'Congratulations !' existing = p.keys() fp = p['front-page'] fp.setTitle(front_title) fp.setDescription(front_desc) fp.setText(front_text, mimetype='text/html') fp.reindexObject()
def get_lang_data(code): lang_data = {} #try to extract native name from zope lang_parts = code.split("-") lang_code = lang_parts[0] territory = None if len(lang_parts) == 2: territory = lang_parts[1].upper() lang_locale = locales.getLocale(lang_code, territory) if not lang_locale.id.language: return lang_name = lang_locale.id.language if lang_locale.displayNames and lang_locale.displayNames.languages: lang_name = lang_locale.displayNames.languages.get( lang_code, "").capitalize() lang_data["name"] = lang_name locale_territory = lang_locale.displayNames.territories.get( territory, "") if locale_territory: lang_data["native"] = u"%s (%s)" % (lang_name, locale_territory) else: lang_data["native"] = lang_name return lang_data
def translation_status(self): if ITranslatable.providedBy(self.context) and len(capi.pivot_languages): untranslated = list(capi.pivot_languages) if self.context.language in untranslated: untranslated.remove(self.context.language) for pivot_lang in untranslated: if translation.get_field_translations(self.context, pivot_lang): untranslated.remove(pivot_lang) if len(untranslated): i18n_langs = [] locale = locales.getLocale(get_default_language().split("-")[0], None) for lang in untranslated: if (locale and locale.displayNames and locale.displayNames.languages ): i18n_langs.append( locale.displayNames.languages.get(lang, lang)) continue i18n_langs.append(lang) return ", ".join(i18n_langs) return translate(_("translated"), context=get_request()) return translate("n/a", context=get_request())