Now, I really don't like this because it would break pages which rely
on how segments are placed. For example, if I expected segment_3 to be
X data in a page without the two-char language code in the url, adding
the language code would break that page.
Can't you just have a two character language code for each language, even the default one? This way your segment_x variables would always be consisent, segment_1 being the language, segment_2 being the first data segment?
Or if you have everything else working beautifully, but your only problem is that default language starts data from segment_1 and other languages from segment_2 (seeing for them segment_1 is the language variable) you could just replace the segment_x with your own variables.
Basically in your index.php just write a simple IF statement checking if the user is browsing the default language or not and based on that, set segment_x variables to your own variables, maintaining the same logic.
- language = default
- part_1 = segment_1
- part_2 = segment_2
- language = segment_1
- part_1 = segment_2
- part_2 = segment_3
This way you can use part_1 in your templates and it becomes segment_1 for default language, segment_2 for others.