OK, since we're using a PF, the Box[ResourceBundle] really isn't necessary, either.
On Fri, Feb 27, 2009 at 11:12 AM, Derek Chen-Becker <[email protected]>wrote: > Take 3. Change the factory application to: > > > LiftRules.resourceBundleFactories.toList.find(_.isDefinedAt(locale)).toList.map(_.apply(locale)) > > Derek > > > On Fri, Feb 27, 2009 at 11:05 AM, Derek Chen-Becker <[email protected] > > wrote: > >> Tim, I just noticed that the PF type should be: >> >> type ResourceBundleFactoryPF = >> PartialFunction[(String,Locale),Box[ResourceBundle]] >> >> The reason we wanted to use PFs was to allow specialization for a specific >> language. I'm wondering whether the string parameter is really necessary, >> since really that's intended to look up a bundle name via >> ResourceBundle.getBundle. That would change the proposed code to: >> >> type ResourceBundleFactoryPF = PartialFunction[Locale,Box[ResourceBundle]] >> var resourceBundleFactories : RulesSeq[ResourceBundleFactory] >> >> // In S.scala >> def resourceBundles : List[ResourceBundle] = >> ... >> case Nil => _resBundle.set(LiftRules.resourceNames.flatMap(name => >> tryo { >> List(ResourceBundle.getBundle(name, locale)) >> } openOr { >> // I think this is right... >> >> LiftRules.resourceBundleFactories.toList.find(_.isDefinedAt(locale)).map(_.apply(locale)) >> openOr Nil >> })) >> >> >> Derek >> >> >> >> On Fri, Feb 27, 2009 at 9:58 AM, Tim Perrett <[email protected]>wrote: >> >>> >>> Guys, >>> >>> Me and Derek have just been chatting over IM debating the whole >>> resource bundle loading mech in Lift. As you know, im working on this >>> database localization stuff right now as I need it for work. >>> >>> Right now, were loading bundles using the normal >>> ResourceBundle.getBundle methods from Java. Whilst this is good for >>> most applications, when you need flexibility to do more compelx >>> localization, it falls down a bit. >>> >>> Id like to propose adding a configurable "bundle factory" to >>> LiftRules, so that we provide a localization hook. Something like: >>> >>> // LiftRules.scala >>> type ResourceBundleFactoryPF = (String,Locale) => Box[ResourceBundle] >>> var resourceBundleFactories : RulesSeq[ResourceBundleFactory] >>> >>> Then, in S.scala where we load the bundles, rather than having openOr >>> Nil, it could fall through to the custom loaders like so: >>> >>> case Nil => _resBundle.set(LiftRules.resourceNames.flatMap(name => >>> tryo { >>> List(ResourceBundle.getBundle(name, locale)) >>> } openOr { >>> // load bundle factories, do something >>> // here to load them (not sure what yet!) >>> LiftRules.resourceBundleFactories >>> })) >>> >>> Then in Boot.scala you could do: >>> >>> LiftRules.resourceBundleFactories.prepend { >>> case (basename, locale) => DBResourceBundle(basename, locale) >>> } >>> >>> Thoughts? >>> >>> Cheers >>> >>> Tim >>> >>> >>> >>> >>> >>> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---
