diff --git a/reactos/dll/win32/setupapi/parser.c b/reactos/dll/win32/setupapi/parser.c index 96ac06da039..df776a097fb 100644 --- a/reactos/dll/win32/setupapi/parser.c +++ b/reactos/dll/win32/setupapi/parser.c @@ -311,10 +311,12 @@ static const WCHAR *get_string_subst( const struct inf_file *file, const WCHAR * struct section *strings_section; struct line *line; struct field *field; - unsigned int i; + unsigned int i,j; int dirid; WCHAR *dirid_str, *end; const WCHAR *ret = NULL; + WCHAR StringLangId[13] = {'S','t','r','i','n','g','s','.',0}; + TCHAR Lang[5]; if (!*len) /* empty string (%%) is replaced by single percent */ { @@ -323,16 +325,38 @@ static const WCHAR *get_string_subst( const struct inf_file *file, const WCHAR * } if (file->strings_section == -1) goto not_found; strings_section = file->sections[file->strings_section]; - for (i = 0, line = strings_section->lines; i < strings_section->nb_lines; i++, line++) + for (j = 0, line = strings_section->lines; j < strings_section->nb_lines; j++, line++) { - if (line->key_field == -1) continue; - if (strncmpiW( str, file->fields[line->key_field].text, *len )) continue; + if (line->key_field == -1) continue; + if (strncmpiW( str, file->fields[line->key_field].text, *len )) continue; if (!file->fields[line->key_field].text[*len]) break; - } - if (i == strings_section->nb_lines || !line->nb_fields) goto not_found; - field = &file->fields[line->first_field]; - *len = strlenW( field->text ); - return field->text; + } + if (j == strings_section->nb_lines || !line->nb_fields) goto not_found; + field = &file->fields[line->first_field]; + GetLocaleInfo(LOCALE_SYSTEM_DEFAULT, LOCALE_ILANGUAGE, Lang, sizeof(Lang)/sizeof(TCHAR)); // get the current system locale for translated strings + strcatW(StringLangId, Lang); // append the Language identifier from GetLocaleInfo + // now you have e.g. Strings.0407 for german translations + for (i = 0; i < file->nb_sections; i++) // search in all sections + { + if (!strcmpiW(file->sections[i]->name,StringLangId)) // if the section is a Strings.* section + { + strings_section = file->sections[i]; // select this section for further use + for (j = 0, line = strings_section->lines; j < strings_section->nb_lines; j++, line++) // process all lines in this section + { + if (line->key_field == -1) continue; // if no key then skip + if (strncmpiW( str, file->fields[line->key_field].text, *len )) continue; // if wrong key name, then skip + if (!file->fields[line->key_field].text[*len]) // if value exist + { + field = &file->fields[line->first_field]; // then extract value and + break; // no more search necessary + } + } + } + } + *len = strlenW( field->text ); // set length + ret = field->text; // return the english or translated string + return ret; + not_found: /* check for integer id */ if ((dirid_str = HeapAlloc( GetProcessHeap(), 0, (*len+1) * sizeof(WCHAR) ))) diff --git a/reactos/media/inf/NET_NIC.inf b/reactos/media/inf/NET_NIC.inf index 314dff9378c..0c652d860ab 100644 Binary files a/reactos/media/inf/NET_NIC.inf and b/reactos/media/inf/NET_NIC.inf differ diff --git a/reactos/media/inf/cdrom.inf b/reactos/media/inf/cdrom.inf index ebbc6015cd3..a2668e2e4d8 100644 Binary files a/reactos/media/inf/cdrom.inf and b/reactos/media/inf/cdrom.inf differ diff --git a/reactos/media/inf/cpu.inf b/reactos/media/inf/cpu.inf index 386dc94d27d..f2cca8f4add 100644 Binary files a/reactos/media/inf/cpu.inf and b/reactos/media/inf/cpu.inf differ diff --git a/reactos/media/inf/display.inf b/reactos/media/inf/display.inf index 9f34892bd82..a77d0a2b3d8 100644 Binary files a/reactos/media/inf/display.inf and b/reactos/media/inf/display.inf differ diff --git a/reactos/media/inf/fdc.inf b/reactos/media/inf/fdc.inf index 73f66d3312d..cd7f5f35e44 100644 Binary files a/reactos/media/inf/fdc.inf and b/reactos/media/inf/fdc.inf differ diff --git a/reactos/media/inf/hdc.inf b/reactos/media/inf/hdc.inf index d06273c2679..92e38e7bce6 100644 Binary files a/reactos/media/inf/hdc.inf and b/reactos/media/inf/hdc.inf differ diff --git a/reactos/media/inf/keyboard.inf b/reactos/media/inf/keyboard.inf index c6866fd7861..c1fa4332561 100644 Binary files a/reactos/media/inf/keyboard.inf and b/reactos/media/inf/keyboard.inf differ diff --git a/reactos/media/inf/machine.inf b/reactos/media/inf/machine.inf index 5a59f4b5dac..e000c5dde53 100644 Binary files a/reactos/media/inf/machine.inf and b/reactos/media/inf/machine.inf differ diff --git a/reactos/media/inf/msmouse.inf b/reactos/media/inf/msmouse.inf index 597b14c5652..3536c3d3ff6 100644 Binary files a/reactos/media/inf/msmouse.inf and b/reactos/media/inf/msmouse.inf differ diff --git a/reactos/media/inf/netisa.inf b/reactos/media/inf/netisa.inf index 522bc1b2f18..f56e3bb5b5d 100644 Binary files a/reactos/media/inf/netisa.inf and b/reactos/media/inf/netisa.inf differ diff --git a/reactos/media/inf/ports.inf b/reactos/media/inf/ports.inf index c20867aa43b..299080e6a95 100644 Binary files a/reactos/media/inf/ports.inf and b/reactos/media/inf/ports.inf differ diff --git a/reactos/media/inf/scsi.inf b/reactos/media/inf/scsi.inf index 61395099faf..6e46d5c5722 100644 Binary files a/reactos/media/inf/scsi.inf and b/reactos/media/inf/scsi.inf differ diff --git a/reactos/media/inf/usb.inf b/reactos/media/inf/usb.inf index bdc431be53a..ed491e659b3 100644 Binary files a/reactos/media/inf/usb.inf and b/reactos/media/inf/usb.inf differ diff --git a/reactos/media/inf/usbport.inf b/reactos/media/inf/usbport.inf index 3af158c000a..bf2cc24ff19 100644 Binary files a/reactos/media/inf/usbport.inf and b/reactos/media/inf/usbport.inf differ diff --git a/reactos/media/inf/usbstor.inf b/reactos/media/inf/usbstor.inf index 7cc5a645e88..9a6b8668ae0 100644 Binary files a/reactos/media/inf/usbstor.inf and b/reactos/media/inf/usbstor.inf differ