1) Might not be a good idea to use CFStringGetCStringPtr as it might return
NULL2) kCFStringEncodingMacRoman is likely not a good choice as the
encoding, especially for localized strings

If I were you, I'd do something like (warning: Mail compiled code):
const char* MyGetLocalizedCString(CFStringRef string)
{
    // if you need to be thread safe, add proper locks around that
    static CFMutableDictionaryRef mapping = NULL;
    if(mapping == NULL) {
        mapping = CFDictionaryCreateMutable(NULL, 0,
&kCFTypeDictionaryKeyCallBacks, NULL);
    }

    const char* result = (const char *)CFDictionaryGetValue(mapping,
string);
    if(result == NULL) {
         CFStringRef localizedString = CFCopyLocalizedStringFromTable(string,
CFSTR("LibraryLocalizable"), NULL);
         result = (const char
*)malloc(CFStringGetMaximumSizeForEncoding(CFStringGetLength(localizedString),
kCFStringEncodingUTF8);
CFStringGetCString(localizedString, (char *)result, bufferSize,
kCFStringEncodingUTF8);
CFDictionarySetValue(mapping, string, result);
    }

    return result;
}

And use that as you localizing function:
#define _(a) MyGetLocalizedCString(CFSTR(a))

Even better, if you can change that, add an extra parameter to your
localizing macro and give it a better name:
#define _loc(a, comment) MyGetLocalizedCString(CFSTR(a))

This keeps your code portable and you should be able to replace the
occurrences of "_" in all your code fairly easily with a search and replace.
Added value is:
A) it makes your code more readable (IMHO)
B) it adds a proper way to explain the context of the localization
C) you can generate your strings file directly using genstrings:

genstrings -s _loc *.c -o /tmp ; mv /tmp/Localized.strings
<path>/LibraryLocalizable.strings

If you really can't do that, preprocess your files before launching
genstrings and call use "-s MyGetLocalizedCString"

-- 
Julien

On Tue, Mar 4, 2008 at 3:53 AM, Mitchell Livingston <[EMAIL PROTECTED]>
wrote:

> Hello,
>
> I have C code that I want to generate a strings file for use on Mac. I
> use:
>
> #if defined(SYS_DARWIN)
>   #include <CoreFoundation/CFBundle.h>
>   #define _(a) CFStringGetCStringPtr(CFCopyLocalizedStringFromTable( \
>                CFSTR( a ), CFSTR("LibraryLocalizable"), "comment" ),
> kCFStringEncodingMacRoman)
> #else
> ...
>
> Unfortunately genstrings does not seem to compile the code before
> attempting to create the strings file. Is there some way to generate a
> string file while still considering that the code will also be run on
> other operating systems that generate localizable strings in different
> ways?
>
> Thanks,
> Mitchell Livingston
> _______________________________________________
>
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/cocoa-dev/jjalon%40gmail.com
>
> This email sent to [EMAIL PROTECTED]
>
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to