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 -~----------~----~----~----~------~----~------~--~---
