Issues with Multi-lingual website data caching - Python - Google App Engine
I assume the individual product rendering in a particular language accounts for the majority (or at least a big chunk) of the rendering effort for the entire page.
You could cache server-side the rendered product results for a particular language, prior to assembling them in a complete results page and sending them to the client, using a 2D product x language lookup scheme.
You could also render individual product info offline, on a task queue, whenever products are added/modified, and store/cache them on the server ahead of time. Maybe just for the most heavily used languages?
This way you avoid individual product rendering on the critical path - in response to the client requests, at the expense of added memcache/storage.
You just need to:

split your rendering in 2 stages (individual product info and complete results page assembly) 
add logic for cleanup/update of the stored/cached rendered product info when products add/change/delete ops occur
(maybe) add logic for on-demand product info rendering when pre-rendered info is not yet available when the client request comes in (if not acceptable to simply not display the info)

You might want to check if it's preferable to cache/store the rendered product info compressed (html compresses well) - balancing memcache/storage costs vs instance runtime costs vs response time performance (I have yet to do such experiment).
Question:
What are the most efficient approaches to multi-lingual data caching on a web server, given that clients want the same base set of data but in their locale format. So 1000 data items max to be cached and then rendered on demand in specific locale format.
My current approach is as follows:
I have a multilingual python Google App Engine project. The multi-lingual part uses Babel and various language .po and .mo files for translation. This is all fine and dandy. Issues, start to arise when considering caching of data. For example, let's say I have 1000 product listings that I want clients to be able to access 100 at a time. I use memcache with a datastore backup entity if the memcache gets blasted. Again, all is fine and dandy, but not multilingual. Each product has to be mapped to match the key with the particular locale of any client, English, French, Turkish, whatever. The way I do it now is to map the products under a specific locale, say 'en_US', and render server side using jinja2 templates. Each bit of data that is multilingual specific is rendered using the locale settings for date, price formatting title etc. etc. in the 'en_US' format and placed into the datastore and memcache all nicely mapped out ready for rendering. However, I have an extra step to take for getting those multilingual data into the correct format for a clients locale, and that is by way of standard {{ }} translations and jinja2 filters, generally for stuff like price formatting and dates. Problem is this is slowing things up as this all has to be rendered on the server and then passed back to the client. The initial 100 products are always server side rendered, however, before caching I was rendering the rest client side from JSON data via ajax calls to the server. Now it's all server side rendering.
I don't want to get into a marathon discussion regarding server vs client side rendering, but I would appreciate any insights into how others have successfully handled multi-lingual caching