You might consider taking the approach used by iGoogle, which has a set of special variables __BIDI_START_EDGE__, __BIDI_END_EDGE__, __BIDI_DIR__, and __BIDI_REVERSE_DIR__
. You write your CSS rules as usual, except instead of writing something like margin-left you write margin-__BIDI_START_EDGE__
. Then write a bit of server-side code that takes your style sheet and the direction (ltr or rtl), and fills in the variables with the values "left", "right", "ltr", and "rtl" as appropriate.
This doesn't let you serve a single file, but it's pretty robust, and it has the advantage that anything you don't want to be flipped can just be written with a literal "left" or "right".
(See this email from the OpenAjaxIDE mailing list, which says "IBM's localization experts have given a thumbs up to the BIDI features in OpenSocial" and suggests adopting them for an OpenAjax project.)