Obtenir la langue de l'utilisateur (en C sous OS X)

  • Créateur du sujet Créateur du sujet pichenette
  • Date de début Date de début
A

Anonyme

Invité
Salut,

je ne connais rien à la programmation Mac, mais je voudrais porter un soft SDL/OpenGL à OS X. Il y a, à priori, juste deux choses qu'il faut que je recode : l'obtention de la langue de l'utilisateur, et l'ouverture d'une page web dans le browser par défaut.

Je viens de passer des heures à chercher sur le site d'apple, dans les newsgroups, sur le web, sans trouver comment obtenir les langues préférées de l'utilisateur.

Quelqu'un saurait comment faire, ou pourrait me donner un lien vers une doc qui explique ça ?

Merci !
 
pichenette a dit:
Salut,

je ne connais rien à la programmation Mac, mais je voudrais porter un soft SDL/OpenGL à OS X. Il y a, à priori, juste deux choses qu'il faut que je recode : l'obtention de la langue de l'utilisateur, et l'ouverture d'une page web dans le browser par défaut.

Je viens de passer des heures à chercher sur le site d'apple, dans les newsgroups, sur le web, sans trouver comment obtenir les langues préférées de l'utilisateur.

Quelqu'un saurait comment faire, ou pourrait me donner un lien vers une doc qui explique ça ?

Merci !

Pour ta premiere question, le mécanisme d'obtention de la langue courante dépends du type de projet que tu vas construire sur Mac OS X.
Si c 'est une projet Cocoa, chaque langue est séparée dans des fichiers NIBs et des fichier strings, il te suffit de lire une valeur dans le fichier string courant pour connaitre la langue que Mac OS X a décidé d'affecter à ton appli en fonction des choix de l'utilisateur et des possibilités de ton appli.

Pour la seconde question, plusieurs solutions, mais qui dépendent du type de projet et de savoir si ta page est une URL ou un fichier livré local avec ton appli par exemple.

Si c'est de l'AppleScript studio, fastoche : open location "http://tonaddresse"

Si c'est du C Cocoa ou Carbon, il faut passer par LSGetApplicationForInfo pour rechercher l'appli qui est associée aux HTML, création d'une référence sur le fichier puis LSOpenFromRefSpec.


Cordialement
 
Didier Guillion a dit:
Pour ta premiere question, le mécanisme d'obtention de la langue courante dépends du type de projet que tu vas construire sur Mac OS X.
Si c 'est une projet Cocoa, chaque langue est séparée dans des fichiers NIBs et des fichier strings, il te suffit de lire une valeur dans le fichier string courant pour connaitre la langue que Mac OS X a décidé d'affecter à ton appli en fonction des choix de l'utilisateur et des possibilités de ton appli.

:mouais:

moi j'utiliserais plutôt :
- (NSArray *)preferredLocalizations
de NSBundle

Si c'est du C Cocoa ou Carbon, il faut passer par LSGetApplicationForInfo pour rechercher l'appli qui est associée aux HTML, création d'une référence sur le fichier puis LSOpenFromRefSpec
en Cocoa c'est :
- (BOOL)getInfoForFile: (NSString *)fullPath application: (NSString **)appName type: (NSString **)type
de NSWorkspace
 
mpergand a dit:
:mouais:

moi j'utiliserais plutôt :
- (NSArray *)preferredLocalizations
de NSBundle


en Cocoa c'est :
- (BOOL)getInfoForFile: (NSString *)fullPath application: (NSString **)appName type: (NSString **)type
de NSWorkspace

Oui, peut etre, si le soft sous SDL est écrit en Objective-C ...

Evitons l'amalgame systematique Cocoa==Obj-C.

Cordialement
 
Didier Guillion a dit:
Oui, peut etre, si le soft sous SDL est écrit en Objective-C ...

Evitons l'amalgame systematique Cocoa==Obj-C.

Cordialement

Salut Didier,

On peut utilser Java ou ObjC en Cocoa (Python aussi mais c'est une autre histoire)

Dans bon nombre de cas, Cocoa se contente d'appeler la méthode Carbon ( en C ) correspondante.
 
mpergand a dit:
Salut Didier,

On peut utilser Java ou ObjC en Cocoa (Python aussi mais c'est une autre histoire)

Dans bon nombre de cas, Cocoa se contente d'appeler la méthode Carbon ( en C ) correspondante.

Oui, c'est bien ce que je veut dire.

Cordialement
 
Merci pour vos réponses. Même si je ne comprend pas tout, ça me donne des pistes... :siffle:

Mon programme est bien en C pur. Donc si je comprend bien, je dois me tourner vers Carbon.

En cherchant la doc de NSBundle/preferedLocalizations, j'ai trouvé cette page sur developer.apple.com qui donne aussi une méthode avec Carbon.

La quatrième réponse sur cette page de Cocoa Dev Central semble indiquer qu'il faudra effectivement que je crée un fichier de resources spécial Mac pour avoir tout simplement le nom de la langue préférée de l'utilisateur... soupir... :(

A propos de l'ouverture de page web, il ne s'agit pas d'un fichier local mais d'une URL en http. Je n'ai pas encore cherché d'info sur le sujet et comptais créer un nouveau thread, mais toutes les infos sont bonnes à prendre :)
 
pichenette a dit:
Merci pour vos réponses. Même si je ne comprend pas tout, ça me donne des pistes... :siffle:

Mon programme est bien en C pur. Donc si je comprend bien, je dois me tourner vers Carbon.

En cherchant la doc de NSBundle/preferedLocalizations, j'ai trouvé cette page sur developer.apple.com qui donne aussi une méthode avec Carbon.
Oui, tu es sur la bonne voie.
La quatrième réponse sur cette page de Cocoa Dev Central semble indiquer qu'il faudra effectivement que je crée un fichier de resources spécial Mac pour avoir tout simplement le nom de la langue préférée de l'utilisateur... soupir... :(
C'est ce que j'utilise personnellement dans mes programmes.
A propos de l'ouverture de page web, il ne s'agit pas d'un fichier local mais d'une URL en http. Je n'ai pas encore cherché d'info sur le sujet et comptais créer un nouveau thread, mais toutes les infos sont bonnes à prendre :)
Alors en C sur, Carbon, sur page web non locale, c'est plutot facile : ICLaunchUrl

http://developer.apple.com/document...fig/internet_config_ref/function_group_7.html

Cordialement
 
Oh, je viens de trouver une autre méthode qui a l'air bien plus simple, en utilisant CFLocaleCopyCurrent() et CFLocaleGetIdentifier().

Le seul problème est qu'elle nécessite OS X 10.3, alors que celle avec CFBundleCopyPreferredLocalizationsFromArray() marche sous 10.0...

Merci pour l'info sur ICLaunchURL(). La doc d'Apple est un peu succinte; je vais essayer de trouver plus d'infos :)
 
pichenette a dit:
Oh, je viens de trouver une autre méthode qui a l'air bien plus simple, en utilisant CFLocaleCopyCurrent() et CFLocaleGetIdentifier().

Le seul problème est qu'elle nécessite OS X 10.3, alors que celle avec CFBundleCopyPreferredLocalizationsFromArray() marche sous 10.0...
D'apres des stats non officielle il y aurait 30% de Mac sous 9, 30 % sur X.2, 30 % sur X.3, a peu pret.

Merci pour l'info sur ICLaunchURL(). La doc d'Apple est un peu succinte; je vais essayer de trouver plus d'infos :)

Un point de départ :
http://developer.apple.com/samplecode/PGPuam/listing40.html

Cordialement