2015-03-04 3 views
2

J'ai toutes les traductions d'une ressource dans un seul exécutable. En effet:FindResourceEx et les langues de secours

STRINGTABLE 
    LANGUAGE LANG_ENGLISH, LANG_ENGLISH_US 
BEGIN 
    IDSTR_HELLO "Hello" 
END 

STRINGTABLE 
    LANGUAGE LANG_SPANISH, LANG_SPANISH_PANAMA 
BEGIN 
    IDSTR_HELLO "Hola" 
END 

// ... more languages ... 

J'essaie de trouver le (plus) un approprié à l'aide d'un FindResourceEx donné LANGID. Un LANGID comprend à la fois la langue et un sous-langage. Par exemple, je pourrais avoir des ressources pour l'espagnol tel que parlé au Panama (LANGUAGE_SPANISH, SUBLANG_SPANISH_PANAMA) et l'espagnol comme parlé au Mexique (LANGUAGE_SPANISH, SUBLANG_SPANISH_MEXICAN). Quand il y a une correspondance exacte entre le langid désiré et l'une des ressources, tout va bien.

Si j'utilise FindResourceEx pour essayer de trouver la ressource pour une troisième version de l'espagnol, disons (LANG_SPANISH, SUBLANG_SPANISH_COSTA_RICA), la recherche échouera car je n'ai pas de ressource spécifique pour le Costa Rica. Dans un tel cas, je voudrais "retomber" à toute saveur du langage principal.

je lis quelque chose qui a proposé la création du sous-langage à SUBLANG_NEUTRAL doit correspondre à une ressource avec la même langue principale:

HRSRC handle = FindResourceEx(NULL, RT_STRING, MAKEINTRESOURCE(IDSTR_HELLO), langid); 
if (handle == NULL) { 
    fallback_langid = MAKELANGID(PRIMARYLANGID(langid), SUBLANG_NEUTRAL); 
    handle = FindResourceEx(NULL, RT_STRING, MAKEINTRESOURCE(IDSTR_HELLO), fallback_langid); 
} 

Malheureusement cela ne fonctionne pas. La définition du sous-langage n'est pas non plus SUBLANG_DEFAULT. (Il semble que les sous-langages neutres et par défaut n'ont de sens que lorsque la langue principale est également neutre ou par défaut.)

Quelles sont mes options? Existe-t-il un moyen d'énumérer les ressources et de faire ma propre comparaison de la langue principale dans le LANGID? J'ai regardé l'assortiment des fonctions de type EnumResource, mais la plupart d'entre elles semblent spécifiques à l'utilisation de MUI. Je n'utilise pas intentionnellement MUI, pour diverses raisons, y compris l'obligation d'avoir toutes les traductions dans un seul binaire.

Répondre

1

Je serais étonné si vous ne pouvez pas utiliser EnumResourceLanguages sans avoir de fichiers MUI. Bien sûr, si tout le reste échoue, vous pouvez peut-être créer une table avec une sous-langue par défaut pour chaque langue principale. Ou votre table peut avoir une valeur par défaut pour chaque paire de langue primaire/secondaire. Vous pouvez stocker cette table dans votre code ou dans une ressource personnalisée.

+0

Ah, bien sûr, EnumResourceLanguages ​​fonctionne parfaitement. Merci! –