Excerpts from Okuma, Wayne's message of 2015-08-11 02:49:28 +0000: > > -----Original Message----- > From: Doug Hellmann [mailto:d...@doughellmann.com] > Sent: Monday, August 10, 2015 4:00 PM > To: openstack-dev > Subject: Re: [openstack-dev] [oslo] Question on oslo_i18n._message > > Excerpts from Okuma, Wayne's message of 2015-08-10 21:22:09 +0000: > > Hello All, > > > > I have a question on the usage of oslo_i18n._message and hope to get an > > answer. > > > > Some background first: > > I'm working on a portion of Glance - the Glance Metadata Definitions (i.e., > > metadefs) section. > > We have about ~20 .JSON files which hold data. The .JSON files get loaded > > into the Glance.metadef_xxx related tables which in turn gets displayed in > > Horizon via the glance REST API code. > > There are some fields in the .JSON files which need to be internationalized. > > I have a program which produces glance-json.pot files for the JSON files. > > > > In Horizon, when they are viewing the data, the end-user may change the > > language they wish to see by going into the profile section (upper right > > hand corner of Horizon) and selecting the language. So, I need a more > > dynamic version of i18n than just the version of i18n that gets started up > > when the Glance service is started (i.e., based on GLANCE_LOCALEDIR and > > LANGUAGE, LANG, etc., settings). > > The API layer can also set a language based on the browser settings. Are the > JSON files being served by the glance API? Or are they in some other way > coming through from glance? > > WO: The JSON data is being served by the REST API as far as I know. The > current API doesn't support being passed a locale flag yet though.
I think the idea is to use the existing HTTP headers for describing the locale, rather than an explicit parameter to the API endpoint. > > > > This seems to work: > > > > import oslo_i18n > > > > # Assumes GLANCE_JSON_LOCALEDIR has been set appropriately. > > def translate(message, locale=None): > > obj = oslo_i18n._message.Message(message, domain='glance-json') > > return oslo_i18n.translate(obj, locale) ... > > # then in code... > > def _format_namespace_from_db(self, namespace_obj, locale=None): > > ... > > display_name=translate(namespace_obj['display_name'], locale), > > > > The returned display_name will have the correct version based on the locale > > passed in. > > > > But, is this correct usage of oslo_i18n._message()? > > Or is it to remain hidden since it is not part of oslo_i18n.__init__py? > > If it is to remain hidden, then, what would be the better way of getting a > > "dynamic" translation based on some arbitrary locale that is passed in. > > > > If you don't know the answer, but, know someone that might - please pass on > > their name(s) and I can try to contact them directly. > > > > Thanks and Regards, > > Wayne Okuma > > As you surmise, the "_message" module is marked private (note the "_" prefix > on the name), so you shouldn't use it directly. The fact that Message objects > exists is an implementation detail of the lazy translation machinery, and > isn't meant to be something that applications rely on. > > You could use oslo_i18n.TranslatorFactory to get a function to wrap your > strings instead [1]. The "primary" attribute should be what you want. > Passing the return value to translate() would then give you the translated > value. > > Something like: > > factory = oslo_i18n.TranslatorFactory('glance-json') > trans = factory.primary > > def translate(message, locale=None): > return oslo_i18n.translate(trans(message), locale) > > This ought to work whether lazy translation is enabled or not, as long as the > catalog files are installed properly. > > Doug > > WO: The above works for me...Thanks. I'm curious if there will be a version > in which a "global" set of already opened catalogues will be kept for the > sake of efficiency? You can hold onto the TranslatorFactory instance to accomplish that, but we don't have any plans to hide something like that inside the library. Doug > > [1] > http://docs.openstack.org/developer/oslo.i18n/api.html#oslo_i18n.TranslatorFactory > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > > __________________________________________________________________________ > OpenStack Development Mailing List (not for usage questions) > Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev __________________________________________________________________________ OpenStack Development Mailing List (not for usage questions) Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev