I18N - Charset: Difference between revisions
first stab, needs work for the changed characters |
update |
||
Line 1: | Line 1: | ||
== Introduction == | |||
''' | The D3 code that handles the GUI bitmap font can only load a specific range of bytes as characters. To get the most out of the available entries, special charsets are used. The fonts (Carleton for the menu f.i.) are build/patched so that the right characters appear in the right place. | ||
=== Encodings === | |||
Note that the language files (f.i. '''strings/german.lang''') as well as the readables and the FM dictionariaries are expected to be in the following encodings: | |||
* '''Czech:''' ISO-8859-2 | |||
* '''Russian:''' WIN-1251 | |||
* '''All other languages:''' ISO-8859-1 | |||
The characters are remapped upon loading the dictionary/readable. | |||
== European Languages == | |||
This mapping is used for European languages, f.i. '''Czech''', '''French''', '''German''', '''Spanish''', '''Portuguese''', '''Polish'''. Note that the double accented characters in Hungarian '''Ő, ő, Ű and ű''' look a bit different from '''Ö, ö, Ü and ü'''! | |||
In the table below, the original characters are given in '''()''' below the TDM character. | |||
'''Color code:''' | |||
|} | {{box|#f0d0d0|Character not displayed by D3|Unusable}}{{box|#d0d0f0|Changed from the ISO-8859-1 default|Changed}} | ||
{|class="wikitable" border=1 style="border-collapse: collapse; font-size: 95%" cellspacing=0 cellpadding=2 width=100% | {|class="wikitable" border=1 style="border-collapse: collapse; font-size: 95%" cellspacing=0 cellpadding=2 width=100% | ||
Line 34: | Line 46: | ||
|- | |- | ||
!0… | !0… | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|00<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|01<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|02<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|03<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|04<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|05<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|06<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|07<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|08<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|09<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|0A<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|0B<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|0C<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|0D<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|0E<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|0F<br>'''–''' | ||
|- | |- | ||
!1… | !1… | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|10<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|11<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|12<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|13<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|14<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|15<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|16<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|17<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|18<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|19<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|1A<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|1B<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|1C<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|1D<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|1E<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|1F<br>'''–''' | ||
|- | |- | ||
!2… | !2… | ||
|align='center'|20<br> | |align='center'|20<br>''' ''' | ||
|align='center'|21<br>'''!''' | |align='center'|21<br>'''!''' | ||
|align='center'|22<br>'''"''' | |align='center'|22<br>'''"''' | ||
Line 182: | Line 194: | ||
|align='center'|7D<br>'''}''' | |align='center'|7D<br>'''}''' | ||
|align='center'|7E<br>'''~''' | |align='center'|7E<br>'''~''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|7F<br>'''–''' | ||
|- | |- | ||
!8… | !8… | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|80<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|81<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|82<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|83<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|84<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|85<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|86<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|87<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|88<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|89<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|8A<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|8B<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|8C<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|8D<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|8E<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|8F<br>'''–''' | ||
|- | |- | ||
!9… | !9… | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|90<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|91<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|92<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|93<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|94<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|95<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|96<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|97<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|98<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|99<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|9A<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|9B<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|9C<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|9D<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|9E<br>'''–''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|9F<br>'''–''' | ||
|- | |- | ||
!A… | !A… | ||
|align='center'|A0<br>''' | |align='center'|A0<br>'''[https://secure.wikimedia.org/wikipedia/en/wiki/Non-breaking_space NBSP]''' | ||
|align='center'|A1<br>'''¡''' | |align='center'|A1<br>'''¡''' | ||
|align='center'|A2<br>'''¢''' | |align='center' style='background: #d0d0f0'|A2<br>'''Ű'''<br>(¢)''' | ||
|align='center'|A3<br>'''£''' | |align='center' style='background: #d0d0f0'|A3<br>'''ě'''<br>(£)''' | ||
|align='center'|A4<br>'''¤''' | |align='center' style='background: #d0d0f0'|A4<br>'''ű'''<br>(¤)''' | ||
|align='center'|A5<br>'''¥''' | |align='center' style='background: #d0d0f0'|A5<br>'''Ě'''<br>(¥)''' | ||
|align='center'|A6<br>'''¦''' | |align='center' style='background: #d0d0f0'|A6<br>'''Š'''<br>(¦)''' | ||
|align='center'|A7<br>'''§''' | |align='center'|A7<br>'''§''' | ||
|align='center'|A8<br>'''¨''' | |align='center' style='background: #d0d0f0'|A8<br>'''š'''<br>(¨)''' | ||
|align='center'|A9<br>'''©''' | |align='center' style='background: #d0d0f0'|A9<br>'''Ů'''<br>(©)''' | ||
|align='center'|AA<br>'''ª''' | |align='center' style='background: #d0d0f0'|AA<br>'''Ą'''<br>(ª)''' | ||
|align='center'|AB<br>'''«''' | |align='center' style='background: #d0d0f0'|AB<br>'''Ę'''<br>(«)''' | ||
|align='center'|AC<br>'''¬''' | |align='center' style='background: #d0d0f0'|AC<br>'''Č'''<br>(¬)''' | ||
|align='center'|AD<br>''' | |align='center'|AD<br>'''[https://secure.wikimedia.org/wikipedia/en/wiki/Soft_hyphen SHY]''' | ||
|align='center'|AE<br>'''®''' | |align='center' style='background: #d0d0f0'|AE<br>'''č'''<br>(®)''' | ||
|align='center'|AF<br>'''¯''' | |align='center' style='background: #d0d0f0'|AF<br>'''ů'''<br>(¯)''' | ||
|- | |- | ||
!B… | !B… | ||
|align='center'|B0<br>'''°''' | |align='center' style='background: #d0d0f0'|B0<br>'''Ő'''<br>(°)''' | ||
|align='center'|B1<br>'''±''' | |align='center' style='background: #d0d0f0'|B1<br>'''Ł'''<br>(±)''' | ||
|align='center'|B2<br>'''²''' | |align='center' style='background: #d0d0f0'|B2<br>'''Ť'''<br>(²)''' | ||
|align='center'|B3<br>'''³''' | |align='center' style='background: #d0d0f0'|B3<br>'''Ď'''<br>(³)''' | ||
|align='center'|B4<br>'''´''' | |align='center' style='background: #d0d0f0'|B4<br>'''Ž'''<br>(´)''' | ||
|align='center'|B5<br>'''µ''' | |align='center' style='background: #d0d0f0'|B5<br>'''ł'''<br>(µ)''' | ||
|align='center'|B6<br>'''¶''' | |align='center' style='background: #d0d0f0'|B6<br>'''ť'''<br>(¶)''' | ||
|align='center'|B7<br>'''·''' | |align='center' style='background: #d0d0f0'|B7<br>'''ď'''<br>(·)''' | ||
|align='center'|B8<br>'''¸''' | |align='center' style='background: #d0d0f0'|B8<br>'''ž'''<br>(¸)''' | ||
|align='center'|B9<br>'''¹''' | |align='center' style='background: #d0d0f0'|B9<br>'''ő'''<br>(¹)''' | ||
|align='center'|BA<br>'''º''' | |align='center' style='background: #d0d0f0'|BA<br>'''ą'''<br>(º)''' | ||
|align='center'|BB<br>'''»''' | |align='center' style='background: #d0d0f0'|BB<br>'''ę'''<br>(»)''' | ||
|align='center'|BC<br>'''¼''' | |align='center' style='background: #d0d0f0'|BC<br>'''Œ'''<br>(¼)''' | ||
|align='center'|BD<br>'''½''' | |align='center' style='background: #d0d0f0'|BD<br>'''œ'''<br>(½)''' | ||
|align='center'|BE<br>'''¾''' | |align='center' style='background: #d0d0f0'|BE<br>'''Ÿ'''<br>(¾)''' | ||
|align='center'|BF<br>'''¿''' | |align='center'|BF<br>'''¿''' | ||
Line 288: | Line 300: | ||
|align='center'|D5<br>'''Õ''' | |align='center'|D5<br>'''Õ''' | ||
|align='center'|D6<br>'''Ö''' | |align='center'|D6<br>'''Ö''' | ||
|align='center'|D7<br>'''×''' | |align='center' style='background: #d0d0f0'|D7<br>'''Ř'''<br>(×)''' | ||
|align='center'|D8<br>'''Ø''' | |align='center'|D8<br>'''Ø''' | ||
|align='center'|D9<br>'''Ù''' | |align='center'|D9<br>'''Ù''' | ||
Line 326: | Line 338: | ||
|align='center'|F5<br>'''õ''' | |align='center'|F5<br>'''õ''' | ||
|align='center'|F6<br>'''ö''' | |align='center'|F6<br>'''ö''' | ||
|align='center'|F7<br>'''÷''' | |align='center' style='background: #d0d0f0'|F7<br>'''ř'''<br>(÷)''' | ||
|align='center'|F8<br>'''ø''' | |align='center'|F8<br>'''ø''' | ||
|align='center'|F9<br>'''ù''' | |align='center'|F9<br>'''ù''' | ||
Line 334: | Line 346: | ||
|align='center'|FD<br>'''ý''' | |align='center'|FD<br>'''ý''' | ||
|align='center'|FE<br>'''þ''' | |align='center'|FE<br>'''þ''' | ||
|align='center' style= | |align='center' style='background: #f0d0d0'|FF<br>'''–''' | ||
|} | |} | ||
=== Russian === | |||
The character '''0xFF''' (я) is mapped to '''0xB6''' upon loading. Therefore any Russian font must contain я at the place 0xB6. | |||
{{i18n}} | {{i18n}} |
Revision as of 11:52, 4 November 2011
Introduction
The D3 code that handles the GUI bitmap font can only load a specific range of bytes as characters. To get the most out of the available entries, special charsets are used. The fonts (Carleton for the menu f.i.) are build/patched so that the right characters appear in the right place.
Encodings
Note that the language files (f.i. strings/german.lang) as well as the readables and the FM dictionariaries are expected to be in the following encodings:
- Czech: ISO-8859-2
- Russian: WIN-1251
- All other languages: ISO-8859-1
The characters are remapped upon loading the dictionary/readable.
European Languages
This mapping is used for European languages, f.i. Czech, French, German, Spanish, Portuguese, Polish. Note that the double accented characters in Hungarian Ő, ő, Ű and ű look a bit different from Ö, ö, Ü and ü!
In the table below, the original characters are given in () below the TDM character.
Color code:
UnusableChanged
…0 | …1 | …2 | …3 | …4 | …5 | …6 | …7 | …8 | …9 | …A | …B | …C | …D | …E | …F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0… | 00 – |
01 – |
02 – |
03 – |
04 – |
05 – |
06 – |
07 – |
08 – |
09 – |
0A – |
0B – |
0C – |
0D – |
0E – |
0F – |
1… | 10 – |
11 – |
12 – |
13 – |
14 – |
15 – |
16 – |
17 – |
18 – |
19 – |
1A – |
1B – |
1C – |
1D – |
1E – |
1F – |
2… | 20 |
21 ! |
22 " |
23 # |
24 $ |
25 % |
26 & |
27 '' |
28 ( |
29 ) |
2A * |
2B + |
2C , |
2D - |
2E . |
2F / |
3… | 30 0 |
31 1 |
32 2 |
33 3 |
34 4 |
35 5 |
36 6 |
37 7 |
38 8 |
39 9 |
3A : |
3B ; |
3C < |
3D = |
3E > |
3F ? |
4… | 40 @ |
41 A |
42 B |
43 C |
44 D |
45 E |
46 F |
47 G |
48 H |
49 I |
4A J |
4B K |
4C L |
4D M |
4E N |
4F O |
5… | 50 P |
51 Q |
52 R |
53 S |
54 T |
55 U |
56 V |
57 W |
58 X |
59 Y |
5A Z |
5B [ |
5C \ |
5D ] |
5E ^ |
5F _ |
6… | 60 ` |
61 a |
62 b |
63 c |
64 d |
65 e |
66 f |
67 g |
68 h |
69 i |
6A j |
6B k |
6C l |
6D m |
6E n |
6F o |
7… | 70 p |
71 q |
72 r |
73 s |
74 t |
75 u |
76 v |
77 w |
78 x |
79 y |
7A z |
7B { |
7C | |
7D } |
7E ~ |
7F – |
8… | 80 – |
81 – |
82 – |
83 – |
84 – |
85 – |
86 – |
87 – |
88 – |
89 – |
8A – |
8B – |
8C – |
8D – |
8E – |
8F – |
9… | 90 – |
91 – |
92 – |
93 – |
94 – |
95 – |
96 – |
97 – |
98 – |
99 – |
9A – |
9B – |
9C – |
9D – |
9E – |
9F – |
A… | A0 NBSP |
A1 ¡ |
A2 Ű (¢) |
A3 ě (£) |
A4 ű (¤) |
A5 Ě (¥) |
A6 Š (¦) |
A7 § |
A8 š (¨) |
A9 Ů (©) |
AA Ą (ª) |
AB Ę («) |
AC Č (¬) |
AD SHY |
AE č (®) |
AF ů (¯) |
B… | B0 Ő (°) |
B1 Ł (±) |
B2 Ť (²) |
B3 Ď (³) |
B4 Ž (´) |
B5 ł (µ) |
B6 ť (¶) |
B7 ď (·) |
B8 ž (¸) |
B9 ő (¹) |
BA ą (º) |
BB ę (») |
BC Œ (¼) |
BD œ (½) |
BE Ÿ (¾) |
BF ¿ |
C… | C0 À |
C1 Á |
C2 Â |
C3 Ã |
C4 Ä |
C5 Å |
C6 Æ |
C7 Ç |
C8 È |
C9 É |
CA Ê |
CB Ë |
CC Ì |
CD Í |
CE Î |
CF Ï |
D… | D0 Ð |
D1 Ñ |
D2 Ò |
D3 Ó |
D4 Ô |
D5 Õ |
D6 Ö |
D7 Ř (×) |
D8 Ø |
D9 Ù |
DA Ú |
DB Û |
DC Ü |
DD Ý |
DE Þ |
DF ß |
E… | E0 à |
E1 á |
E2 â |
E3 ã |
E4 ä |
E5 å |
E6 æ |
E7 ç |
E8 è |
E9 é |
EA ê |
EB ë |
EC ì |
ED í |
EE î |
EF ï |
F… | F0 ð |
F1 ñ |
F2 ò |
F3 ó |
F4 ô |
F5 õ |
F6 ö |
F7 ř (÷) |
F8 ø |
F9 ù |
FA ú |
FB û |
FC ü |
FD ý |
FE þ |
FF – |
Russian
The character 0xFF (я) is mapped to 0xB6 upon loading. Therefore any Russian font must contain я at the place 0xB6.
See Also
- I18N - Main article
Translation resources
- The charset TDM fonts use
- I18N.pl - a script to transform a FM into a mission and I18N data
- Bug Tracker entry #2779
- Text Decals for Signs etc.
- Fonts in TDM
- Font Conversion & Repair - with links to ExportFontToDoom3, Q3Font, Refont, and Font Patcher
Overview of translations
- I18N Status - Which FMs are translated into which language (not entirely up to date)
- Translating FMs
- List of translators
- Translator's Guide
Translation discussions