1*5e7646d2SAndroid Build Coastguard Worker /*
2*5e7646d2SAndroid Build Coastguard Worker * Localization test program for CUPS.
3*5e7646d2SAndroid Build Coastguard Worker *
4*5e7646d2SAndroid Build Coastguard Worker * Usage:
5*5e7646d2SAndroid Build Coastguard Worker *
6*5e7646d2SAndroid Build Coastguard Worker * ./testlang [-l locale] [-p ppd] ["String to localize"]
7*5e7646d2SAndroid Build Coastguard Worker *
8*5e7646d2SAndroid Build Coastguard Worker * Copyright 2007-2017 by Apple Inc.
9*5e7646d2SAndroid Build Coastguard Worker * Copyright 1997-2006 by Easy Software Products.
10*5e7646d2SAndroid Build Coastguard Worker *
11*5e7646d2SAndroid Build Coastguard Worker * Licensed under Apache License v2.0. See the file "LICENSE" for more information.
12*5e7646d2SAndroid Build Coastguard Worker */
13*5e7646d2SAndroid Build Coastguard Worker
14*5e7646d2SAndroid Build Coastguard Worker /*
15*5e7646d2SAndroid Build Coastguard Worker * Include necessary headers...
16*5e7646d2SAndroid Build Coastguard Worker */
17*5e7646d2SAndroid Build Coastguard Worker
18*5e7646d2SAndroid Build Coastguard Worker #include "cups-private.h"
19*5e7646d2SAndroid Build Coastguard Worker #include "ppd-private.h"
20*5e7646d2SAndroid Build Coastguard Worker #ifdef __APPLE__
21*5e7646d2SAndroid Build Coastguard Worker # include <CoreFoundation/CoreFoundation.h>
22*5e7646d2SAndroid Build Coastguard Worker #endif /* __APPLE__ */
23*5e7646d2SAndroid Build Coastguard Worker
24*5e7646d2SAndroid Build Coastguard Worker
25*5e7646d2SAndroid Build Coastguard Worker /*
26*5e7646d2SAndroid Build Coastguard Worker * Local functions...
27*5e7646d2SAndroid Build Coastguard Worker */
28*5e7646d2SAndroid Build Coastguard Worker
29*5e7646d2SAndroid Build Coastguard Worker static int show_ppd(const char *filename);
30*5e7646d2SAndroid Build Coastguard Worker static int test_string(cups_lang_t *language, const char *msgid);
31*5e7646d2SAndroid Build Coastguard Worker static void usage(void);
32*5e7646d2SAndroid Build Coastguard Worker
33*5e7646d2SAndroid Build Coastguard Worker
34*5e7646d2SAndroid Build Coastguard Worker /*
35*5e7646d2SAndroid Build Coastguard Worker * 'main()' - Load the specified language and show the strings for yes and no.
36*5e7646d2SAndroid Build Coastguard Worker */
37*5e7646d2SAndroid Build Coastguard Worker
38*5e7646d2SAndroid Build Coastguard Worker int /* O - Exit status */
main(int argc,char * argv[])39*5e7646d2SAndroid Build Coastguard Worker main(int argc, /* I - Number of command-line arguments */
40*5e7646d2SAndroid Build Coastguard Worker char *argv[]) /* I - Command-line arguments */
41*5e7646d2SAndroid Build Coastguard Worker {
42*5e7646d2SAndroid Build Coastguard Worker int i; /* Looping var */
43*5e7646d2SAndroid Build Coastguard Worker const char *opt; /* Current option */
44*5e7646d2SAndroid Build Coastguard Worker int errors = 0; /* Number of errors */
45*5e7646d2SAndroid Build Coastguard Worker int dotests = 1; /* Do standard tests? */
46*5e7646d2SAndroid Build Coastguard Worker cups_lang_t *language = NULL;/* Message catalog */
47*5e7646d2SAndroid Build Coastguard Worker cups_lang_t *language2 = NULL;
48*5e7646d2SAndroid Build Coastguard Worker /* Message catalog (second time) */
49*5e7646d2SAndroid Build Coastguard Worker struct lconv *loc; /* Locale data */
50*5e7646d2SAndroid Build Coastguard Worker char buffer[1024]; /* String buffer */
51*5e7646d2SAndroid Build Coastguard Worker double number; /* Number */
52*5e7646d2SAndroid Build Coastguard Worker static const char * const tests[] = /* Test strings */
53*5e7646d2SAndroid Build Coastguard Worker {
54*5e7646d2SAndroid Build Coastguard Worker "1",
55*5e7646d2SAndroid Build Coastguard Worker "-1",
56*5e7646d2SAndroid Build Coastguard Worker "3",
57*5e7646d2SAndroid Build Coastguard Worker "5.125"
58*5e7646d2SAndroid Build Coastguard Worker };
59*5e7646d2SAndroid Build Coastguard Worker
60*5e7646d2SAndroid Build Coastguard Worker
61*5e7646d2SAndroid Build Coastguard Worker /*
62*5e7646d2SAndroid Build Coastguard Worker * Parse command-line...
63*5e7646d2SAndroid Build Coastguard Worker */
64*5e7646d2SAndroid Build Coastguard Worker
65*5e7646d2SAndroid Build Coastguard Worker _cupsSetLocale(argv);
66*5e7646d2SAndroid Build Coastguard Worker
67*5e7646d2SAndroid Build Coastguard Worker for (i = 1; i < argc; i ++)
68*5e7646d2SAndroid Build Coastguard Worker {
69*5e7646d2SAndroid Build Coastguard Worker if (argv[i][0] == '-')
70*5e7646d2SAndroid Build Coastguard Worker {
71*5e7646d2SAndroid Build Coastguard Worker if (!strcmp(argv[i], "--help"))
72*5e7646d2SAndroid Build Coastguard Worker {
73*5e7646d2SAndroid Build Coastguard Worker usage();
74*5e7646d2SAndroid Build Coastguard Worker }
75*5e7646d2SAndroid Build Coastguard Worker else
76*5e7646d2SAndroid Build Coastguard Worker {
77*5e7646d2SAndroid Build Coastguard Worker for (opt = argv[i] + 1; *opt; opt ++)
78*5e7646d2SAndroid Build Coastguard Worker {
79*5e7646d2SAndroid Build Coastguard Worker switch (*opt)
80*5e7646d2SAndroid Build Coastguard Worker {
81*5e7646d2SAndroid Build Coastguard Worker case 'l' :
82*5e7646d2SAndroid Build Coastguard Worker i ++;
83*5e7646d2SAndroid Build Coastguard Worker if (i >= argc)
84*5e7646d2SAndroid Build Coastguard Worker {
85*5e7646d2SAndroid Build Coastguard Worker usage();
86*5e7646d2SAndroid Build Coastguard Worker return (1);
87*5e7646d2SAndroid Build Coastguard Worker }
88*5e7646d2SAndroid Build Coastguard Worker
89*5e7646d2SAndroid Build Coastguard Worker language = cupsLangGet(argv[i]);
90*5e7646d2SAndroid Build Coastguard Worker language2 = cupsLangGet(argv[i]);
91*5e7646d2SAndroid Build Coastguard Worker
92*5e7646d2SAndroid Build Coastguard Worker setenv("LANG", argv[i], 1);
93*5e7646d2SAndroid Build Coastguard Worker setenv("SOFTWARE", "CUPS/" CUPS_SVERSION, 1);
94*5e7646d2SAndroid Build Coastguard Worker break;
95*5e7646d2SAndroid Build Coastguard Worker
96*5e7646d2SAndroid Build Coastguard Worker case 'p' :
97*5e7646d2SAndroid Build Coastguard Worker i ++;
98*5e7646d2SAndroid Build Coastguard Worker if (i >= argc)
99*5e7646d2SAndroid Build Coastguard Worker {
100*5e7646d2SAndroid Build Coastguard Worker usage();
101*5e7646d2SAndroid Build Coastguard Worker return (1);
102*5e7646d2SAndroid Build Coastguard Worker }
103*5e7646d2SAndroid Build Coastguard Worker
104*5e7646d2SAndroid Build Coastguard Worker if (!language)
105*5e7646d2SAndroid Build Coastguard Worker {
106*5e7646d2SAndroid Build Coastguard Worker language = cupsLangDefault();
107*5e7646d2SAndroid Build Coastguard Worker language2 = cupsLangDefault();
108*5e7646d2SAndroid Build Coastguard Worker }
109*5e7646d2SAndroid Build Coastguard Worker
110*5e7646d2SAndroid Build Coastguard Worker dotests = 0;
111*5e7646d2SAndroid Build Coastguard Worker errors += show_ppd(argv[i]);
112*5e7646d2SAndroid Build Coastguard Worker break;
113*5e7646d2SAndroid Build Coastguard Worker
114*5e7646d2SAndroid Build Coastguard Worker default :
115*5e7646d2SAndroid Build Coastguard Worker usage();
116*5e7646d2SAndroid Build Coastguard Worker return (1);
117*5e7646d2SAndroid Build Coastguard Worker }
118*5e7646d2SAndroid Build Coastguard Worker }
119*5e7646d2SAndroid Build Coastguard Worker }
120*5e7646d2SAndroid Build Coastguard Worker }
121*5e7646d2SAndroid Build Coastguard Worker else
122*5e7646d2SAndroid Build Coastguard Worker {
123*5e7646d2SAndroid Build Coastguard Worker if (!language)
124*5e7646d2SAndroid Build Coastguard Worker {
125*5e7646d2SAndroid Build Coastguard Worker language = cupsLangDefault();
126*5e7646d2SAndroid Build Coastguard Worker language2 = cupsLangDefault();
127*5e7646d2SAndroid Build Coastguard Worker }
128*5e7646d2SAndroid Build Coastguard Worker
129*5e7646d2SAndroid Build Coastguard Worker dotests = 0;
130*5e7646d2SAndroid Build Coastguard Worker errors += test_string(language, argv[i]);
131*5e7646d2SAndroid Build Coastguard Worker }
132*5e7646d2SAndroid Build Coastguard Worker }
133*5e7646d2SAndroid Build Coastguard Worker
134*5e7646d2SAndroid Build Coastguard Worker if (!language)
135*5e7646d2SAndroid Build Coastguard Worker {
136*5e7646d2SAndroid Build Coastguard Worker language = cupsLangDefault();
137*5e7646d2SAndroid Build Coastguard Worker language2 = cupsLangDefault();
138*5e7646d2SAndroid Build Coastguard Worker }
139*5e7646d2SAndroid Build Coastguard Worker
140*5e7646d2SAndroid Build Coastguard Worker if (language != language2)
141*5e7646d2SAndroid Build Coastguard Worker {
142*5e7646d2SAndroid Build Coastguard Worker errors ++;
143*5e7646d2SAndroid Build Coastguard Worker
144*5e7646d2SAndroid Build Coastguard Worker puts("**** ERROR: Language cache did not work! ****");
145*5e7646d2SAndroid Build Coastguard Worker puts("First result from cupsLangGet:");
146*5e7646d2SAndroid Build Coastguard Worker }
147*5e7646d2SAndroid Build Coastguard Worker
148*5e7646d2SAndroid Build Coastguard Worker printf("Language = \"%s\"\n", language->language);
149*5e7646d2SAndroid Build Coastguard Worker printf("Encoding = \"%s\"\n", _cupsEncodingName(language->encoding));
150*5e7646d2SAndroid Build Coastguard Worker
151*5e7646d2SAndroid Build Coastguard Worker if (dotests)
152*5e7646d2SAndroid Build Coastguard Worker {
153*5e7646d2SAndroid Build Coastguard Worker errors += test_string(language, "No");
154*5e7646d2SAndroid Build Coastguard Worker errors += test_string(language, "Yes");
155*5e7646d2SAndroid Build Coastguard Worker
156*5e7646d2SAndroid Build Coastguard Worker if (language != language2)
157*5e7646d2SAndroid Build Coastguard Worker {
158*5e7646d2SAndroid Build Coastguard Worker puts("Second result from cupsLangGet:");
159*5e7646d2SAndroid Build Coastguard Worker
160*5e7646d2SAndroid Build Coastguard Worker printf("Language = \"%s\"\n", language2->language);
161*5e7646d2SAndroid Build Coastguard Worker printf("Encoding = \"%s\"\n", _cupsEncodingName(language2->encoding));
162*5e7646d2SAndroid Build Coastguard Worker printf("No = \"%s\"\n", _cupsLangString(language2, "No"));
163*5e7646d2SAndroid Build Coastguard Worker printf("Yes = \"%s\"\n", _cupsLangString(language2, "Yes"));
164*5e7646d2SAndroid Build Coastguard Worker }
165*5e7646d2SAndroid Build Coastguard Worker
166*5e7646d2SAndroid Build Coastguard Worker loc = localeconv();
167*5e7646d2SAndroid Build Coastguard Worker
168*5e7646d2SAndroid Build Coastguard Worker for (i = 0; i < (int)(sizeof(tests) / sizeof(tests[0])); i ++)
169*5e7646d2SAndroid Build Coastguard Worker {
170*5e7646d2SAndroid Build Coastguard Worker number = _cupsStrScand(tests[i], NULL, loc);
171*5e7646d2SAndroid Build Coastguard Worker
172*5e7646d2SAndroid Build Coastguard Worker printf("_cupsStrScand(\"%s\") number=%f\n", tests[i], number);
173*5e7646d2SAndroid Build Coastguard Worker
174*5e7646d2SAndroid Build Coastguard Worker _cupsStrFormatd(buffer, buffer + sizeof(buffer), number, loc);
175*5e7646d2SAndroid Build Coastguard Worker
176*5e7646d2SAndroid Build Coastguard Worker printf("_cupsStrFormatd(%f) buffer=\"%s\"\n", number, buffer);
177*5e7646d2SAndroid Build Coastguard Worker
178*5e7646d2SAndroid Build Coastguard Worker if (strcmp(buffer, tests[i]))
179*5e7646d2SAndroid Build Coastguard Worker {
180*5e7646d2SAndroid Build Coastguard Worker errors ++;
181*5e7646d2SAndroid Build Coastguard Worker puts("**** ERROR: Bad formatted number! ****");
182*5e7646d2SAndroid Build Coastguard Worker }
183*5e7646d2SAndroid Build Coastguard Worker }
184*5e7646d2SAndroid Build Coastguard Worker
185*5e7646d2SAndroid Build Coastguard Worker #ifdef __APPLE__
186*5e7646d2SAndroid Build Coastguard Worker /*
187*5e7646d2SAndroid Build Coastguard Worker * Test all possible language IDs for compatibility with _cupsAppleLocale...
188*5e7646d2SAndroid Build Coastguard Worker */
189*5e7646d2SAndroid Build Coastguard Worker
190*5e7646d2SAndroid Build Coastguard Worker CFIndex j, /* Looping var */
191*5e7646d2SAndroid Build Coastguard Worker num_locales; /* Number of locales */
192*5e7646d2SAndroid Build Coastguard Worker CFArrayRef locales; /* Locales */
193*5e7646d2SAndroid Build Coastguard Worker CFStringRef locale_id, /* Current locale ID */
194*5e7646d2SAndroid Build Coastguard Worker language_id; /* Current language ID */
195*5e7646d2SAndroid Build Coastguard Worker char locale_str[256], /* Locale ID C string */
196*5e7646d2SAndroid Build Coastguard Worker language_str[256], /* Language ID C string */
197*5e7646d2SAndroid Build Coastguard Worker *bufptr; /* Pointer to ".UTF-8" in POSIX locale */
198*5e7646d2SAndroid Build Coastguard Worker size_t buflen; /* Length of POSIX locale */
199*5e7646d2SAndroid Build Coastguard Worker # if TEST_COUNTRY_CODES
200*5e7646d2SAndroid Build Coastguard Worker CFIndex k, /* Looping var */
201*5e7646d2SAndroid Build Coastguard Worker num_country_codes; /* Number of country codes */
202*5e7646d2SAndroid Build Coastguard Worker CFArrayRef country_codes; /* Country codes */
203*5e7646d2SAndroid Build Coastguard Worker CFStringRef country_code, /* Current country code */
204*5e7646d2SAndroid Build Coastguard Worker temp_id; /* Temporary language ID */
205*5e7646d2SAndroid Build Coastguard Worker char country_str[256]; /* Country code C string */
206*5e7646d2SAndroid Build Coastguard Worker # endif /* TEST_COUNTRY_CODES */
207*5e7646d2SAndroid Build Coastguard Worker
208*5e7646d2SAndroid Build Coastguard Worker locales = CFLocaleCopyAvailableLocaleIdentifiers();
209*5e7646d2SAndroid Build Coastguard Worker num_locales = CFArrayGetCount(locales);
210*5e7646d2SAndroid Build Coastguard Worker
211*5e7646d2SAndroid Build Coastguard Worker # if TEST_COUNTRY_CODES
212*5e7646d2SAndroid Build Coastguard Worker country_codes = CFLocaleCopyISOCountryCodes();
213*5e7646d2SAndroid Build Coastguard Worker num_country_codes = CFArrayGetCount(country_codes);
214*5e7646d2SAndroid Build Coastguard Worker # endif /* TEST_COUNTRY_CODES */
215*5e7646d2SAndroid Build Coastguard Worker
216*5e7646d2SAndroid Build Coastguard Worker printf("%d locales are available:\n", (int)num_locales);
217*5e7646d2SAndroid Build Coastguard Worker
218*5e7646d2SAndroid Build Coastguard Worker for (j = 0; j < num_locales; j ++)
219*5e7646d2SAndroid Build Coastguard Worker {
220*5e7646d2SAndroid Build Coastguard Worker locale_id = CFArrayGetValueAtIndex(locales, j);
221*5e7646d2SAndroid Build Coastguard Worker language_id = CFLocaleCreateCanonicalLanguageIdentifierFromString(kCFAllocatorDefault, locale_id);
222*5e7646d2SAndroid Build Coastguard Worker
223*5e7646d2SAndroid Build Coastguard Worker if (!locale_id || !CFStringGetCString(locale_id, locale_str, (CFIndex)sizeof(locale_str), kCFStringEncodingASCII))
224*5e7646d2SAndroid Build Coastguard Worker {
225*5e7646d2SAndroid Build Coastguard Worker printf("%d: FAIL (unable to get locale ID string)\n", (int)j + 1);
226*5e7646d2SAndroid Build Coastguard Worker errors ++;
227*5e7646d2SAndroid Build Coastguard Worker continue;
228*5e7646d2SAndroid Build Coastguard Worker }
229*5e7646d2SAndroid Build Coastguard Worker
230*5e7646d2SAndroid Build Coastguard Worker if (!language_id || !CFStringGetCString(language_id, language_str, (CFIndex)sizeof(language_str), kCFStringEncodingASCII))
231*5e7646d2SAndroid Build Coastguard Worker {
232*5e7646d2SAndroid Build Coastguard Worker printf("%d %s: FAIL (unable to get language ID string)\n", (int)j + 1, locale_str);
233*5e7646d2SAndroid Build Coastguard Worker errors ++;
234*5e7646d2SAndroid Build Coastguard Worker continue;
235*5e7646d2SAndroid Build Coastguard Worker }
236*5e7646d2SAndroid Build Coastguard Worker
237*5e7646d2SAndroid Build Coastguard Worker if (!_cupsAppleLocale(language_id, buffer, sizeof(buffer)))
238*5e7646d2SAndroid Build Coastguard Worker {
239*5e7646d2SAndroid Build Coastguard Worker printf("%d %s(%s): FAIL (unable to convert language ID string to POSIX locale)\n", (int)j + 1, locale_str, language_str);
240*5e7646d2SAndroid Build Coastguard Worker errors ++;
241*5e7646d2SAndroid Build Coastguard Worker continue;
242*5e7646d2SAndroid Build Coastguard Worker }
243*5e7646d2SAndroid Build Coastguard Worker
244*5e7646d2SAndroid Build Coastguard Worker if ((bufptr = strstr(buffer, ".UTF-8")) != NULL)
245*5e7646d2SAndroid Build Coastguard Worker buflen = (size_t)(bufptr - buffer);
246*5e7646d2SAndroid Build Coastguard Worker else
247*5e7646d2SAndroid Build Coastguard Worker buflen = strlen(buffer);
248*5e7646d2SAndroid Build Coastguard Worker
249*5e7646d2SAndroid Build Coastguard Worker if ((language = cupsLangGet(buffer)) == NULL)
250*5e7646d2SAndroid Build Coastguard Worker {
251*5e7646d2SAndroid Build Coastguard Worker printf("%d %s(%s): FAIL (unable to load POSIX locale \"%s\")\n", (int)j + 1, locale_str, language_str, buffer);
252*5e7646d2SAndroid Build Coastguard Worker errors ++;
253*5e7646d2SAndroid Build Coastguard Worker continue;
254*5e7646d2SAndroid Build Coastguard Worker }
255*5e7646d2SAndroid Build Coastguard Worker
256*5e7646d2SAndroid Build Coastguard Worker if (strncasecmp(language->language, buffer, buflen))
257*5e7646d2SAndroid Build Coastguard Worker {
258*5e7646d2SAndroid Build Coastguard Worker printf("%d %s(%s): FAIL (unable to load POSIX locale \"%s\", got \"%s\")\n", (int)j + 1, locale_str, language_str, buffer, language->language);
259*5e7646d2SAndroid Build Coastguard Worker errors ++;
260*5e7646d2SAndroid Build Coastguard Worker continue;
261*5e7646d2SAndroid Build Coastguard Worker }
262*5e7646d2SAndroid Build Coastguard Worker
263*5e7646d2SAndroid Build Coastguard Worker printf("%d %s(%s): PASS (POSIX locale is \"%s\")\n", (int)j + 1, locale_str, language_str, buffer);
264*5e7646d2SAndroid Build Coastguard Worker }
265*5e7646d2SAndroid Build Coastguard Worker
266*5e7646d2SAndroid Build Coastguard Worker CFRelease(locales);
267*5e7646d2SAndroid Build Coastguard Worker
268*5e7646d2SAndroid Build Coastguard Worker # if TEST_COUNTRY_CODES
269*5e7646d2SAndroid Build Coastguard Worker CFRelease(country_codes);
270*5e7646d2SAndroid Build Coastguard Worker # endif /* TEST_COUNTRY_CODES */
271*5e7646d2SAndroid Build Coastguard Worker #endif /* __APPLE__ */
272*5e7646d2SAndroid Build Coastguard Worker }
273*5e7646d2SAndroid Build Coastguard Worker
274*5e7646d2SAndroid Build Coastguard Worker if (errors == 0 && dotests)
275*5e7646d2SAndroid Build Coastguard Worker puts("ALL TESTS PASSED");
276*5e7646d2SAndroid Build Coastguard Worker
277*5e7646d2SAndroid Build Coastguard Worker return (errors > 0);
278*5e7646d2SAndroid Build Coastguard Worker }
279*5e7646d2SAndroid Build Coastguard Worker
280*5e7646d2SAndroid Build Coastguard Worker
281*5e7646d2SAndroid Build Coastguard Worker /*
282*5e7646d2SAndroid Build Coastguard Worker * 'show_ppd()' - Show localized strings in a PPD file.
283*5e7646d2SAndroid Build Coastguard Worker */
284*5e7646d2SAndroid Build Coastguard Worker
285*5e7646d2SAndroid Build Coastguard Worker static int /* O - Number of errors */
show_ppd(const char * filename)286*5e7646d2SAndroid Build Coastguard Worker show_ppd(const char *filename) /* I - Filename */
287*5e7646d2SAndroid Build Coastguard Worker {
288*5e7646d2SAndroid Build Coastguard Worker ppd_file_t *ppd; /* PPD file */
289*5e7646d2SAndroid Build Coastguard Worker ppd_option_t *option; /* PageSize option */
290*5e7646d2SAndroid Build Coastguard Worker ppd_choice_t *choice; /* PageSize/Letter choice */
291*5e7646d2SAndroid Build Coastguard Worker char buffer[1024]; /* String buffer */
292*5e7646d2SAndroid Build Coastguard Worker
293*5e7646d2SAndroid Build Coastguard Worker
294*5e7646d2SAndroid Build Coastguard Worker if ((ppd = ppdOpenFile(filename)) == NULL)
295*5e7646d2SAndroid Build Coastguard Worker {
296*5e7646d2SAndroid Build Coastguard Worker printf("Unable to open PPD file \"%s\".\n", filename);
297*5e7646d2SAndroid Build Coastguard Worker return (1);
298*5e7646d2SAndroid Build Coastguard Worker }
299*5e7646d2SAndroid Build Coastguard Worker
300*5e7646d2SAndroid Build Coastguard Worker ppdLocalize(ppd);
301*5e7646d2SAndroid Build Coastguard Worker
302*5e7646d2SAndroid Build Coastguard Worker if ((option = ppdFindOption(ppd, "PageSize")) == NULL)
303*5e7646d2SAndroid Build Coastguard Worker {
304*5e7646d2SAndroid Build Coastguard Worker puts("No PageSize option.");
305*5e7646d2SAndroid Build Coastguard Worker return (1);
306*5e7646d2SAndroid Build Coastguard Worker }
307*5e7646d2SAndroid Build Coastguard Worker else
308*5e7646d2SAndroid Build Coastguard Worker {
309*5e7646d2SAndroid Build Coastguard Worker printf("PageSize: %s\n", option->text);
310*5e7646d2SAndroid Build Coastguard Worker
311*5e7646d2SAndroid Build Coastguard Worker if ((choice = ppdFindChoice(option, "Letter")) == NULL)
312*5e7646d2SAndroid Build Coastguard Worker {
313*5e7646d2SAndroid Build Coastguard Worker puts("No Letter PageSize choice.");
314*5e7646d2SAndroid Build Coastguard Worker return (1);
315*5e7646d2SAndroid Build Coastguard Worker }
316*5e7646d2SAndroid Build Coastguard Worker else
317*5e7646d2SAndroid Build Coastguard Worker {
318*5e7646d2SAndroid Build Coastguard Worker printf("Letter: %s\n", choice->text);
319*5e7646d2SAndroid Build Coastguard Worker }
320*5e7646d2SAndroid Build Coastguard Worker }
321*5e7646d2SAndroid Build Coastguard Worker
322*5e7646d2SAndroid Build Coastguard Worker printf("media-empty: %s\n", ppdLocalizeIPPReason(ppd, "media-empty", NULL, buffer, sizeof(buffer)));
323*5e7646d2SAndroid Build Coastguard Worker
324*5e7646d2SAndroid Build Coastguard Worker ppdClose(ppd);
325*5e7646d2SAndroid Build Coastguard Worker
326*5e7646d2SAndroid Build Coastguard Worker return (0);
327*5e7646d2SAndroid Build Coastguard Worker }
328*5e7646d2SAndroid Build Coastguard Worker
329*5e7646d2SAndroid Build Coastguard Worker
330*5e7646d2SAndroid Build Coastguard Worker /*
331*5e7646d2SAndroid Build Coastguard Worker * 'test_string()' - Test the localization of a string.
332*5e7646d2SAndroid Build Coastguard Worker */
333*5e7646d2SAndroid Build Coastguard Worker
334*5e7646d2SAndroid Build Coastguard Worker static int /* O - 1 on failure, 0 on success */
test_string(cups_lang_t * language,const char * msgid)335*5e7646d2SAndroid Build Coastguard Worker test_string(cups_lang_t *language, /* I - Language */
336*5e7646d2SAndroid Build Coastguard Worker const char *msgid) /* I - Message */
337*5e7646d2SAndroid Build Coastguard Worker {
338*5e7646d2SAndroid Build Coastguard Worker const char *msgstr; /* Localized string */
339*5e7646d2SAndroid Build Coastguard Worker
340*5e7646d2SAndroid Build Coastguard Worker
341*5e7646d2SAndroid Build Coastguard Worker /*
342*5e7646d2SAndroid Build Coastguard Worker * Get the localized string and then see if we got what we expected.
343*5e7646d2SAndroid Build Coastguard Worker *
344*5e7646d2SAndroid Build Coastguard Worker * For the POSIX locale, the string pointers should be the same.
345*5e7646d2SAndroid Build Coastguard Worker * For any other locale, the string pointers should be different.
346*5e7646d2SAndroid Build Coastguard Worker */
347*5e7646d2SAndroid Build Coastguard Worker
348*5e7646d2SAndroid Build Coastguard Worker msgstr = _cupsLangString(language, msgid);
349*5e7646d2SAndroid Build Coastguard Worker if (strcmp(language->language, "C") && msgid == msgstr)
350*5e7646d2SAndroid Build Coastguard Worker {
351*5e7646d2SAndroid Build Coastguard Worker printf("%-8s = \"%s\" (FAIL - no message catalog loaded)\n", msgid, msgstr);
352*5e7646d2SAndroid Build Coastguard Worker return (1);
353*5e7646d2SAndroid Build Coastguard Worker }
354*5e7646d2SAndroid Build Coastguard Worker else if (!strcmp(language->language, "C") && msgid != msgstr)
355*5e7646d2SAndroid Build Coastguard Worker {
356*5e7646d2SAndroid Build Coastguard Worker printf("%-8s = \"%s\" (FAIL - POSIX locale is localized)\n", msgid, msgstr);
357*5e7646d2SAndroid Build Coastguard Worker return (1);
358*5e7646d2SAndroid Build Coastguard Worker }
359*5e7646d2SAndroid Build Coastguard Worker
360*5e7646d2SAndroid Build Coastguard Worker printf("%-8s = \"%s\" (PASS)\n", msgid, msgstr);
361*5e7646d2SAndroid Build Coastguard Worker
362*5e7646d2SAndroid Build Coastguard Worker return (0);
363*5e7646d2SAndroid Build Coastguard Worker }
364*5e7646d2SAndroid Build Coastguard Worker
365*5e7646d2SAndroid Build Coastguard Worker
366*5e7646d2SAndroid Build Coastguard Worker /*
367*5e7646d2SAndroid Build Coastguard Worker * 'usage()' - Show program usage.
368*5e7646d2SAndroid Build Coastguard Worker */
369*5e7646d2SAndroid Build Coastguard Worker
370*5e7646d2SAndroid Build Coastguard Worker static void
usage(void)371*5e7646d2SAndroid Build Coastguard Worker usage(void)
372*5e7646d2SAndroid Build Coastguard Worker {
373*5e7646d2SAndroid Build Coastguard Worker puts("./testlang [-l locale] [-p ppd] [\"String to localize\"]");
374*5e7646d2SAndroid Build Coastguard Worker }
375