2 Copyright (C) 2000-2005 SKYRIX Software AG
4 This file is part of SOPE.
6 SOPE is free software; you can redistribute it and/or modify it under
7 the terms of the GNU Lesser General Public License as published by the
8 Free Software Foundation; either version 2, or (at your option) any
11 SOPE is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
14 License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with SOPE; see the file COPYING. If not, write to the
18 Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
22 #include "_WOStringTable.h"
25 @implementation _WOStringTable
27 static NSStringEncoding stringFilesEncoding = NSISOLatin1StringEncoding;
29 - (id)initWithPath:(NSString *)_path {
30 if ((self = [super init])) {
31 self->path = [_path copyWithZone:[self zone]];
36 return [self initWithPath:nil];
41 [self->lastRead release];
48 - (NSException *)_handlePropertyListParseException:(NSException *)_exception {
49 [self logWithFormat:@"could not load strings file file '%@': %@",
50 self->path, _exception];
60 if (self->data != nil)
63 #if !LIB_FOUNDATION_LIBRARY /* potentially effects OGo ;-) */
65 For WO4.5 compatibility, we need first to try to open .strings file as a
67 Dictionary must be either in UTF-8 or UTF-16 encoding.
68 If we don't do that, then a dict in UTF-8 encoding will be opened as a
69 dict using defaultCString encoding
71 plist = [NSDictionary dictionaryWithContentsOfFile:self->path];
73 self->data = [plist copy];
78 /* If file was not a dictionary, then it's a standard strings file */
80 if ((sdata = [[NSData alloc] initWithContentsOfFile:self->path]) == nil) {
81 [self errorWithFormat:@"could not read strings file: %@", self->path];
86 tmp = [[NSString alloc] initWithData:sdata encoding:stringFilesEncoding];
87 [sdata release]; sdata = nil;
89 [self errorWithFormat:@"file is not in required encoding (%d): %@",
90 stringFilesEncoding, self->path];
96 if ((plist = [tmp propertyListFromStringsFileFormat]) == nil) {
97 [self errorWithFormat:@"%s: could not load strings file '%@'",
101 [tmp release]; tmp = nil;
102 self->data = [plist copy];
105 [tmp release]; tmp = nil;
106 [[self _handlePropertyListParseException:localException] raise];
113 - (NSString *)stringForKey:(NSString *)_key withDefaultValue:(NSString *)_def {
117 value = [self->data objectForKey:_key];
118 return value != nil ? value : _def;
123 - (NSString *)description {
126 ms = [NSMutableString stringWithCapacity:128];
127 [ms appendFormat:@"<0x%08X[%@]: ", self, NSStringFromClass([self class])];
129 if (self->path) [ms appendFormat:@" path='%@'", self->path];
130 if (self->data) [ms appendFormat:@" strings=#%d", [self->data count]];
131 if (self->lastRead) [ms appendFormat:@" loaddate=%@", self->lastRead];
133 [ms appendString:@">"];
137 @end /* _WOStringTable */