kaluznyo / Murky_i18n
Create an i18n version for Murky ( French Version)
$ hg clone http://bitbucket.org/kaluznyo/murky_i18n/
| commit 53: | 0794437170b7 |
| parent 52: | 80e5645c5444 |
| branch: | default |
10 months ago
Changed (Δ39.0 KB):
English.lproj/Info.plist (45 lines added, 0 lines removed)
English.lproj/Localized.strings (210 lines added, 0 lines removed)
French.lproj/Info.plist (45 lines added, 0 lines removed)
French.lproj/Localized.strings (210 lines added, 0 lines removed)
German.lproj/Localized.strings (binary file changed)
Murky.xcodeproj/project.pbxproj (30 lines added, 4 lines removed)
Resources/English.lproj/Info.plist (45 lines added, 0 lines removed)
Resources/French.lproj/Info.plist (45 lines added, 0 lines removed)
Source/HgDir.m (2 lines added, 2 lines removed)
Source/HgLogOperation.m (7 lines added, 7 lines removed)
Source/HgOperation.m (3 lines added, 3 lines removed)
Source/HgRepository.m (9 lines added, 9 lines removed)
Source/HgRevision.m (1 lines added, 1 lines removed)
Source/HgUncommittedRevision.m (2 lines added, 2 lines removed)
Source/MercurialApp.m (6 lines added, 6 lines removed)
Source/ProjectsController.m (1 lines added, 1 lines removed)
Source/RepoController.m (13 lines added, 20 lines removed)
Source/RepoController_Actions.m (20 lines added, 20 lines removed)
Source/RevisionGraphColumn.m (4 lines added, 4 lines removed)
Source/URLFormatter.m (3 lines added, 3 lines removed)
Up to file-list English.lproj/Info.plist:
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
3 |
<plist version="1.0"> |
|
4 |
<dict> |
|
5 |
<key>CFBundleDevelopmentRegion</key> |
|
6 |
<string>English</string> |
|
7 |
<key>CFBundleDocumentTypes</key> |
|
8 |
<array> |
|
9 |
<dict> |
|
10 |
<key>CFBundleTypeName</key> |
|
11 |
<string>Repository</string> |
|
12 |
<key>CFBundleTypeRole</key> |
|
13 |
<string>Editor</string> |
|
14 |
<key>LSItemContentTypes</key> |
|
15 |
<array> |
|
16 |
<string>public.folder</string> |
|
17 |
</array> |
|
18 |
<key>LSTypeIsPackage</key> |
|
19 |
<false/> |
|
20 |
<key>NSPersistentStoreTypeKey</key> |
|
21 |
<string>XML</string> |
|
22 |
</dict> |
|
23 |
</array> |
|
24 |
<key>CFBundleExecutable</key> |
|
25 |
<string>${EXECUTABLE_NAME}</string> |
|
26 |
<key>CFBundleIconFile</key> |
|
27 |
<string>mercurial-logo-official</string> |
|
28 |
<key>CFBundleIdentifier</key> |
|
29 |
<string>com.mooseyard.Murky</string> |
|
30 |
<key>CFBundleInfoDictionaryVersion</key> |
|
31 |
<string>6.0</string> |
|
32 |
<key>CFBundleName</key> |
|
33 |
<string>${PRODUCT_NAME}</string> |
|
34 |
<key>CFBundlePackageType</key> |
|
35 |
<string>APPL</string> |
|
36 |
<key>CFBundleSignature</key> |
|
37 |
<string>????</string> |
|
38 |
<key>CFBundleVersion</key> |
|
39 |
<string>0.4</string> |
|
40 |
<key>NSMainNibFile</key> |
|
41 |
<string>MainMenu</string> |
|
42 |
<key>NSPrincipalClass</key> |
|
43 |
<string>MYExceptionReportingApplication</string> |
|
44 |
</dict> |
|
45 |
</plist> |
Up to file-list English.lproj/Localized.strings:
1 |
/* No comment provided by engineer. */ |
|
2 |
"%@ is not a directory" = "%@ is not a directory"; |
|
3 |
||
4 |
/* No comment provided by engineer. */ |
|
5 |
"%i file(s) you're trying to check in have not yet been added to the repository (status is '?'). These won't be checked in. Proceed anyway?" = "%i file(s) you're trying to check in have not yet been added to the repository (status is '?'). These won't be checked in. Proceed anyway?"; |
|
6 |
||
7 |
/* No comment provided by engineer. */ |
|
8 |
"(no changes)" = "(no changes)"; |
|
9 |
||
10 |
/* No comment provided by engineer. */ |
|
11 |
"--locally modified--" = "--locally modified--"; |
|
12 |
||
13 |
/* No comment provided by engineer. */ |
|
14 |
"-[HgRevision root] failed! %@" = "-[HgRevision root] failed! %@"; |
|
15 |
||
16 |
/* No comment provided by engineer. */ |
|
17 |
"Are you sure you want to discard all uncommitted changes to the selected files?" = "Are you sure you want to discard all uncommitted changes to the selected files?"; |
|
18 |
||
19 |
/* No comment provided by engineer. */ |
|
20 |
"Are you sure you want to remove the selected files from the repository?" = "Are you sure you want to remove the selected files from the repository?"; |
|
21 |
||
22 |
/* No comment provided by engineer. */ |
|
23 |
"Are you sure you want to update the source tree to revision %i?" = "Are you sure you want to update the source tree to revision %i?"; |
|
24 |
||
25 |
/* No comment provided by engineer. */ |
|
26 |
"Bad absolutePath for %@ %@" = "Bad absolutePath for %1$@ %2$@"; |
|
27 |
||
28 |
/* No comment provided by engineer. */ |
|
29 |
"bad rev0: %i" = "bad rev0: %i"; |
|
30 |
||
31 |
/* No comment provided by engineer. */ |
|
32 |
"bad rev1: %i" = "bad rev1: %i"; |
|
33 |
||
34 |
/* No comment provided by engineer. */ |
|
35 |
"Can't call Mercurial" = "Can't call Mercurial"; |
|
36 |
||
37 |
/* No comment provided by engineer. */ |
|
38 |
"Can't update to uncommitted revision" = "Can't update to uncommitted revision"; |
|
39 |
||
40 |
/* No comment provided by engineer. */ |
|
41 |
"Cancel" = "Cancel"; |
|
42 |
||
43 |
/* No comment provided by engineer. */ |
|
44 |
"Clone" = "Clone"; |
|
45 |
||
46 |
/* No comment provided by engineer. */ |
|
47 |
"Clone repository to URL/file:" = "Clone repository to URL/file:"; |
|
48 |
||
49 |
/* No comment provided by engineer. */ |
|
50 |
"Cloned Repository" = "Cloned Repository"; |
|
51 |
||
52 |
/* No comment provided by engineer. */ |
|
53 |
"Cloning to <%@>" = "Cloning to <%@>"; |
|
54 |
||
55 |
/* No comment provided by engineer. */ |
|
56 |
"Close" = "Close"; |
|
57 |
||
58 |
/* No comment provided by engineer. */ |
|
59 |
"Convert to Mercurial repository?" = "Convert to Mercurial repository?"; |
|
60 |
||
61 |
/* No comment provided by engineer. */ |
|
62 |
"Couldn't locate hg via shell ... assuming it's at %@" = "Couldn't locate hg via shell ... assuming it's at %@"; |
|
63 |
||
64 |
/* No comment provided by engineer. */ |
|
65 |
"dir changed: %@" = "dir changed: %@"; |
|
66 |
||
67 |
/* No comment provided by engineer. */ |
|
68 |
"Discard" = "Discard"; |
|
69 |
||
70 |
/* No comment provided by engineer. */ |
|
71 |
"Discard file changes?" = "Discard file changes?"; |
|
72 |
||
73 |
/* No comment provided by engineer. */ |
|
74 |
"Exception re-opening recent repository %@" = "Exception re-opening recent repository %@"; |
|
75 |
||
76 |
/* No comment provided by engineer. */ |
|
77 |
"Failed to parse date '%@'" = "Failed to parse date '%@'"; |
|
78 |
||
79 |
/* No comment provided by engineer. */ |
|
80 |
"Getting details of revisions [%u..%u]" = "Getting details of revisions [%1$u..%2$u]"; |
|
81 |
||
82 |
/* No comment provided by engineer. */ |
|
83 |
"HgLogOperation couldn't get changeset ID for rev #%i" = "HgLogOperation couldn't get changeset ID for rev #%i"; |
|
84 |
||
85 |
/* No comment provided by engineer. */ |
|
86 |
"HgLogOperation couldn't get changesets from XML: %@" = "HgLogOperation couldn't get changesets from XML: %@"; |
|
87 |
||
88 |
/* No comment provided by engineer. */ |
|
89 |
"HgLogOperation couldn't parse XML: %@" = "HgLogOperation couldn't parse XML: %@"; |
|
90 |
||
91 |
/* No comment provided by engineer. */ |
|
92 |
"HgLogOperation: Couldn't parse XPath '%@': %@" = "HgLogOperation: Couldn't parse XPath '%1$@': %2$@"; |
|
93 |
||
94 |
/* No comment provided by engineer. */ |
|
95 |
"HgRepository: Couldn't start MYDirectoryWatcher on %@" = "HgRepository: Couldn't start MYDirectoryWatcher on %@"; |
|
96 |
||
97 |
/* No comment provided by engineer. */ |
|
98 |
"Hide Unmodified" = "Hide Unmodified"; |
|
99 |
||
100 |
/* No comment provided by engineer. */ |
|
101 |
"Ignoring backup: %@" = "Ignoring backup: %@"; |
|
102 |
||
103 |
/* No comment provided by engineer. */ |
|
104 |
"Illegal n=%i" = "Illegal n=%i"; |
|
105 |
||
106 |
/* No comment provided by engineer. */ |
|
107 |
"Illegal revision number %i" = "Illegal revision number %i"; |
|
108 |
||
109 |
/* No comment provided by engineer. */ |
|
110 |
"Invalid filesystem path" = "Invalid filesystem path"; |
|
111 |
||
112 |
/* No comment provided by engineer. */ |
|
113 |
"Invalid op %i" = "Invalid op %i"; |
|
114 |
||
115 |
/* No comment provided by engineer. */ |
|
116 |
"Invalid revision ID '%@'" = "Invalid revision ID '%@'"; |
|
117 |
||
118 |
/* No comment provided by engineer. */ |
|
119 |
"Invalid start revision" = "Invalid start revision"; |
|
120 |
||
121 |
/* No comment provided by engineer. */ |
|
122 |
"Invalid URL" = "Invalid URL"; |
|
123 |
||
124 |
/* No comment provided by engineer. */ |
|
125 |
"No such directory %@" = "No such directory %@"; |
|
126 |
||
127 |
/* No comment provided by engineer. */ |
|
128 |
"OK" = "OK"; |
|
129 |
||
130 |
/* No comment provided by engineer. */ |
|
131 |
"Pull" = "Pull"; |
|
132 |
||
133 |
/* No comment provided by engineer. */ |
|
134 |
"Pull revisions from repository at URL/file:" = "Pull revisions from repository at URL/file:"; |
|
135 |
||
136 |
/* No comment provided by engineer. */ |
|
137 |
"Pulling from <%@>" = "Pulling from <%@>"; |
|
138 |
||
139 |
/* No comment provided by engineer. */ |
|
140 |
"Push" = "Push"; |
|
141 |
||
142 |
/* No comment provided by engineer. */ |
|
143 |
"Push revisions to repository at URL/file:" = "Push revisions to repository at URL/file:"; |
|
144 |
||
145 |
/* No comment provided by engineer. */ |
|
146 |
"Pushing to <%@>" = "Pushing to <%@>"; |
|
147 |
||
148 |
/* No comment provided by engineer. */ |
|
149 |
"Remove" = "Remove"; |
|
150 |
||
151 |
/* No comment provided by engineer. */ |
|
152 |
"Remove files from repository?" = "Remove files from repository?"; |
|
153 |
||
154 |
/* No comment provided by engineer. */ |
|
155 |
"Revision ID has wrong length (%u)" = "Revision ID has wrong length (%u)"; |
|
156 |
||
157 |
/* No comment provided by engineer. */ |
|
158 |
"Shell command '%@' failed with output: '%@'" = "Shell command '%1$@' failed with output: '%2$@'"; |
|
159 |
||
160 |
/* No comment provided by engineer. */ |
|
161 |
"Show Unmodified" = "Show Unmodified"; |
|
162 |
||
163 |
/* No comment provided by engineer. */ |
|
164 |
"Some files aren't in the repository" = "Some files aren't in the repository"; |
|
165 |
||
166 |
/* No comment provided by engineer. */ |
|
167 |
"Sorry" = "Sorry"; |
|
168 |
||
169 |
/* No comment provided by engineer. */ |
|
170 |
"Stop" = "Stop"; |
|
171 |
||
172 |
/* No comment provided by engineer. */ |
|
173 |
"Successfully created a cloned repository at \n\n%@" = "Successfully created a cloned repository at \n\n%@"; |
|
174 |
||
175 |
/* No comment provided by engineer. */ |
|
176 |
"The directory <%@> is not already a Mercurial repository. Would you like to make it one?" = "The directory <%@> is not already a Mercurial repository. Would you like to make it one?"; |
|
177 |
||
178 |
/* No comment provided by engineer. */ |
|
179 |
"The path to clone into is already inside a Mercurial repository at %@" = "The path to clone into is already inside a Mercurial repository at %@"; |
|
180 |
||
181 |
/* No comment provided by engineer. */ |
|
182 |
"Tip changed from %i to %i ... updating revisions" = "Tip changed from %1$i to %2$i ... updating revisions"; |
|
183 |
||
184 |
/* No comment provided by engineer. */ |
|
185 |
"Unable to find or run the 'hg' command.\n\n%@" = "Unable to find or run the 'hg' command.\n\n%@"; |
|
186 |
||
187 |
/* No comment provided by engineer. */ |
|
188 |
"Unexpected revision numbers from log: expected starting %u, got %u" = "Unexpected revision numbers from log: expected starting %1$u, got %2$u"; |
|
189 |
||
190 |
/* No comment provided by engineer. */ |
|
191 |
"Unknown line from hg status: \"%@\"" = "Unknown line from hg status: \"%@\""; |
|
192 |
||
193 |
/* No comment provided by engineer. */ |
|
194 |
"untitled project" = "untitled project"; |
|
195 |
||
196 |
/* No comment provided by engineer. */ |
|
197 |
"Update" = "Update"; |
|
198 |
||
199 |
/* No comment provided by engineer. */ |
|
200 |
"Update Completed" = "Update Completed"; |
|
201 |
||
202 |
/* No comment provided by engineer. */ |
|
203 |
"Update to revision?" = "Update to revision?"; |
|
204 |
||
205 |
/* No comment provided by engineer. */ |
|
206 |
"Updating changed dirs %@" = "Updating changed dirs %@"; |
|
207 |
||
208 |
/* No comment provided by engineer. */ |
|
209 |
"URL protocol must be %@" = "URL protocol must be %@"; |
|
210 |
Up to file-list French.lproj/Info.plist:
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
3 |
<plist version="1.0"> |
|
4 |
<dict> |
|
5 |
<key>CFBundleDevelopmentRegion</key> |
|
6 |
<string>French</string> |
|
7 |
<key>CFBundleDocumentTypes</key> |
|
8 |
<array> |
|
9 |
<dict> |
|
10 |
<key>CFBundleTypeName</key> |
|
11 |
<string>Repository</string> |
|
12 |
<key>CFBundleTypeRole</key> |
|
13 |
<string>Editor</string> |
|
14 |
<key>LSItemContentTypes</key> |
|
15 |
<array> |
|
16 |
<string>public.folder</string> |
|
17 |
</array> |
|
18 |
<key>LSTypeIsPackage</key> |
|
19 |
<false/> |
|
20 |
<key>NSPersistentStoreTypeKey</key> |
|
21 |
<string>XML</string> |
|
22 |
</dict> |
|
23 |
</array> |
|
24 |
<key>CFBundleExecutable</key> |
|
25 |
<string>${EXECUTABLE_NAME}</string> |
|
26 |
<key>CFBundleIconFile</key> |
|
27 |
<string>mercurial-logo-official</string> |
|
28 |
<key>CFBundleIdentifier</key> |
|
29 |
<string>com.mooseyard.Murky</string> |
|
30 |
<key>CFBundleInfoDictionaryVersion</key> |
|
31 |
<string>6.0</string> |
|
32 |
<key>CFBundleName</key> |
|
33 |
<string>${PRODUCT_NAME}</string> |
|
34 |
<key>CFBundlePackageType</key> |
|
35 |
<string>APPL</string> |
|
36 |
<key>CFBundleSignature</key> |
|
37 |
<string>????</string> |
|
38 |
<key>CFBundleVersion</key> |
|
39 |
<string>0.4</string> |
|
40 |
<key>NSMainNibFile</key> |
|
41 |
<string>MainMenu</string> |
|
42 |
<key>NSPrincipalClass</key> |
|
43 |
<string>MYExceptionReportingApplication</string> |
|
44 |
</dict> |
|
45 |
</plist> |
Up to file-list French.lproj/Localized.strings:
1 |
/* No comment provided by engineer. */ |
|
2 |
"%@ is not a directory" = "%@ is not a directory"; |
|
3 |
||
4 |
/* No comment provided by engineer. */ |
|
5 |
"%i file(s) you're trying to check in have not yet been added to the repository (status is '?'). These won't be checked in. Proceed anyway?" = "%i file(s) you're trying to check in have not yet been added to the repository (status is '?'). These won't be checked in. Proceed anyway?"; |
|
6 |
||
7 |
/* No comment provided by engineer. */ |
|
8 |
"(no changes)" = "(no changes)"; |
|
9 |
||
10 |
/* No comment provided by engineer. */ |
|
11 |
"--locally modified--" = "--locally modified--"; |
|
12 |
||
13 |
/* No comment provided by engineer. */ |
|
14 |
"-[HgRevision root] failed! %@" = "-[HgRevision root] failed! %@"; |
|
15 |
||
16 |
/* No comment provided by engineer. */ |
|
17 |
"Are you sure you want to discard all uncommitted changes to the selected files?" = "Are you sure you want to discard all uncommitted changes to the selected files?"; |
|
18 |
||
19 |
/* No comment provided by engineer. */ |
|
20 |
"Are you sure you want to remove the selected files from the repository?" = "Are you sure you want to remove the selected files from the repository?"; |
|
21 |
||
22 |
/* No comment provided by engineer. */ |
|
23 |
"Are you sure you want to update the source tree to revision %i?" = "Are you sure you want to update the source tree to revision %i?"; |
|
24 |
||
25 |
/* No comment provided by engineer. */ |
|
26 |
"Bad absolutePath for %@ %@" = "Bad absolutePath for %1$@ %2$@"; |
|
27 |
||
28 |
/* No comment provided by engineer. */ |
|
29 |
"bad rev0: %i" = "bad rev0: %i"; |
|
30 |
||
31 |
/* No comment provided by engineer. */ |
|
32 |
"bad rev1: %i" = "bad rev1: %i"; |
|
33 |
||
34 |
/* No comment provided by engineer. */ |
|
35 |
"Can't call Mercurial" = "Can't call Mercurial"; |
|
36 |
||
37 |
/* No comment provided by engineer. */ |
|
38 |
"Can't update to uncommitted revision" = "Can't update to uncommitted revision"; |
|
39 |
||
40 |
/* No comment provided by engineer. */ |
|
41 |
"Cancel" = "Cancel"; |
|
42 |
||
43 |
/* No comment provided by engineer. */ |
|
44 |
"Clone" = "Clone"; |
|
45 |
||
46 |
/* No comment provided by engineer. */ |
|
47 |
"Clone repository to URL/file:" = "Clone repository to URL/file:"; |
|
48 |
||
49 |
/* No comment provided by engineer. */ |
|
50 |
"Cloned Repository" = "Cloned Repository"; |
|
51 |
||
52 |
/* No comment provided by engineer. */ |
|
53 |
"Cloning to <%@>" = "Cloning to <%@>"; |
|
54 |
||
55 |
/* No comment provided by engineer. */ |
|
56 |
"Close" = "Close"; |
|
57 |
||
58 |
/* No comment provided by engineer. */ |
|
59 |
"Convert to Mercurial repository?" = "Convert to Mercurial repository?"; |
|
60 |
||
61 |
/* No comment provided by engineer. */ |
|
62 |
"Couldn't locate hg via shell ... assuming it's at %@" = "Couldn't locate hg via shell ... assuming it's at %@"; |
|
63 |
||
64 |
/* No comment provided by engineer. */ |
|
65 |
"dir changed: %@" = "dir changed: %@"; |
|
66 |
||
67 |
/* No comment provided by engineer. */ |
|
68 |
"Discard" = "Discard"; |
|
69 |
||
70 |
/* No comment provided by engineer. */ |
|
71 |
"Discard file changes?" = "Discard file changes?"; |
|
72 |
||
73 |
/* No comment provided by engineer. */ |
|
74 |
"Exception re-opening recent repository %@" = "Exception re-opening recent repository %@"; |
|
75 |
||
76 |
/* No comment provided by engineer. */ |
|
77 |
"Failed to parse date '%@'" = "Failed to parse date '%@'"; |
|
78 |
||
79 |
/* No comment provided by engineer. */ |
|
80 |
"Getting details of revisions [%u..%u]" = "Getting details of revisions [%1$u..%2$u]"; |
|
81 |
||
82 |
/* No comment provided by engineer. */ |
|
83 |
"HgLogOperation couldn't get changeset ID for rev #%i" = "HgLogOperation couldn't get changeset ID for rev #%i"; |
|
84 |
||
85 |
/* No comment provided by engineer. */ |
|
86 |
"HgLogOperation couldn't get changesets from XML: %@" = "HgLogOperation couldn't get changesets from XML: %@"; |
|
87 |
||
88 |
/* No comment provided by engineer. */ |
|
89 |
"HgLogOperation couldn't parse XML: %@" = "HgLogOperation couldn't parse XML: %@"; |
|
90 |
||
91 |
/* No comment provided by engineer. */ |
|
92 |
"HgLogOperation: Couldn't parse XPath '%@': %@" = "HgLogOperation: Couldn't parse XPath '%1$@': %2$@"; |
|
93 |
||
94 |
/* No comment provided by engineer. */ |
|
95 |
"HgRepository: Couldn't start MYDirectoryWatcher on %@" = "HgRepository: Couldn't start MYDirectoryWatcher on %@"; |
|
96 |
||
97 |
/* No comment provided by engineer. */ |
|
98 |
"Hide Unmodified" = "Hide Unmodified"; |
|
99 |
||
100 |
/* No comment provided by engineer. */ |
|
101 |
"Ignoring backup: %@" = "Ignoring backup: %@"; |
|
102 |
||
103 |
/* No comment provided by engineer. */ |
|
104 |
"Illegal n=%i" = "Illegal n=%i"; |
|
105 |
||
106 |
/* No comment provided by engineer. */ |
|
107 |
"Illegal revision number %i" = "Illegal revision number %i"; |
|
108 |
||
109 |
/* No comment provided by engineer. */ |
|
110 |
"Invalid filesystem path" = "Invalid filesystem path"; |
|
111 |
||
112 |
/* No comment provided by engineer. */ |
|
113 |
"Invalid op %i" = "Invalid op %i"; |
|
114 |
||
115 |
/* No comment provided by engineer. */ |
|
116 |
"Invalid revision ID '%@'" = "Invalid revision ID '%@'"; |
|
117 |
||
118 |
/* No comment provided by engineer. */ |
|
119 |
"Invalid start revision" = "Invalid start revision"; |
|
120 |
||
121 |
/* No comment provided by engineer. */ |
|
122 |
"Invalid URL" = "Invalid URL"; |
|
123 |
||
124 |
/* No comment provided by engineer. */ |
|
125 |
"No such directory %@" = "No such directory %@"; |
|
126 |
||
127 |
/* No comment provided by engineer. */ |
|
128 |
"OK" = "OK"; |
|
129 |
||
130 |
/* No comment provided by engineer. */ |
|
131 |
"Pull" = "Pull"; |
|
132 |
||
133 |
/* No comment provided by engineer. */ |
|
134 |
"Pull revisions from repository at URL/file:" = "Pull revisions from repository at URL/file:"; |
|
135 |
||
136 |
/* No comment provided by engineer. */ |
|
137 |
"Pulling from <%@>" = "Pulling from <%@>"; |
|
138 |
||
139 |
/* No comment provided by engineer. */ |
|
140 |
"Push" = "Push"; |
|
141 |
||
142 |
/* No comment provided by engineer. */ |
|
143 |
"Push revisions to repository at URL/file:" = "Push revisions to repository at URL/file:"; |
|
144 |
||
145 |
/* No comment provided by engineer. */ |
|
146 |
"Pushing to <%@>" = "Pushing to <%@>"; |
|
147 |
||
148 |
/* No comment provided by engineer. */ |
|
149 |
"Remove" = "Remove"; |
|
150 |
||
151 |
/* No comment provided by engineer. */ |
|
152 |
"Remove files from repository?" = "Remove files from repository?"; |
|
153 |
||
154 |
/* No comment provided by engineer. */ |
|
155 |
"Revision ID has wrong length (%u)" = "Revision ID has wrong length (%u)"; |
|
156 |
||
157 |
/* No comment provided by engineer. */ |
|
158 |
"Shell command '%@' failed with output: '%@'" = "Shell command '%1$@' failed with output: '%2$@'"; |
|
159 |
||
160 |
/* No comment provided by engineer. */ |
|
161 |
"Show Unmodified" = "Show Unmodified"; |
|
162 |
||
163 |
/* No comment provided by engineer. */ |
|
164 |
"Some files aren't in the repository" = "Some files aren't in the repository"; |
|
165 |
||
166 |
/* No comment provided by engineer. */ |
|
167 |
"Sorry" = "Sorry"; |
|
168 |
||
169 |
/* No comment provided by engineer. */ |
|
170 |
"Stop" = "Stop"; |
|
171 |
||
172 |
/* No comment provided by engineer. */ |
|
173 |
"Successfully created a cloned repository at \n\n%@" = "Successfully created a cloned repository at \n\n%@"; |
|
174 |
||
175 |
/* No comment provided by engineer. */ |
|
176 |
"The directory <%@> is not already a Mercurial repository. Would you like to make it one?" = "The directory <%@> is not already a Mercurial repository. Would you like to make it one?"; |
|
177 |
||
178 |
/* No comment provided by engineer. */ |
|
179 |
"The path to clone into is already inside a Mercurial repository at %@" = "The path to clone into is already inside a Mercurial repository at %@"; |
|
180 |
||
181 |
/* No comment provided by engineer. */ |
|
182 |
"Tip changed from %i to %i ... updating revisions" = "Tip changed from %1$i to %2$i ... updating revisions"; |
|
183 |
||
184 |
/* No comment provided by engineer. */ |
|
185 |
"Unable to find or run the 'hg' command.\n\n%@" = "Unable to find or run the 'hg' command.\n\n%@"; |
|
186 |
||
187 |
/* No comment provided by engineer. */ |
|
188 |
"Unexpected revision numbers from log: expected starting %u, got %u" = "Unexpected revision numbers from log: expected starting %1$u, got %2$u"; |
|
189 |
||
190 |
/* No comment provided by engineer. */ |
|
191 |
"Unknown line from hg status: \"%@\"" = "Unknown line from hg status: \"%@\""; |
|
192 |
||
193 |
/* No comment provided by engineer. */ |
|
194 |
"untitled project" = "untitled project"; |
|
195 |
||
196 |
/* No comment provided by engineer. */ |
|
197 |
"Update" = "Update"; |
|
198 |
||
199 |
/* No comment provided by engineer. */ |
|
200 |
"Update Completed" = "Update Completed"; |
|
201 |
||
202 |
/* No comment provided by engineer. */ |
|
203 |
"Update to revision?" = "Update to revision?"; |
|
204 |
||
205 |
/* No comment provided by engineer. */ |
|
206 |
"Updating changed dirs %@" = "Updating changed dirs %@"; |
|
207 |
||
208 |
/* No comment provided by engineer. */ |
|
209 |
"URL protocol must be %@" = "URL protocol must be %@"; |
|
210 |
Up to file-list German.lproj/Localized.strings:
Up to file-list Murky.xcodeproj/project.pbxproj:
7 |
7 |
objects = { |
8 |
8 |
|
9 |
9 |
/* Begin PBXBuildFile section */ |
10 |
041D95700FC1C8560084F5C0 /* Localized.strings in Resources */ = {isa = PBXBuildFile; fileRef = 041D956E0FC1C8560084F5C0 /* Localized.strings */; }; |
|
11 |
04E66D5B0FC587F200C0E025 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 04E66D5A0FC587F200C0E025 /* Info.plist */; }; |
|
10 |
12 |
27075E6A0D66B9A900A8F759 /* mercurial-logo-official.icns in Resources */ = {isa = PBXBuildFile; fileRef = 27075E690D66B9A900A8F759 /* mercurial-logo-official.icns */; }; |
11 |
13 |
270E509D0C56A5400069C9C6 /* HgDir.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E509C0C56A5400069C9C6 /* HgDir.m */; }; |
12 |
14 |
270E51290C56AD520069C9C6 /* HgLogOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 270E51280C56AD520069C9C6 /* HgLogOperation.m */; }; |
69 |
71 |
/* End PBXBuildFile section */ |
70 |
72 |
|
71 |
73 |
/* Begin PBXFileReference section */ |
74 |
041D956F0FC1C8560084F5C0 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/Localized.strings; sourceTree = SOURCE_ROOT; }; |
|
75 |
043FB8650FC57E660055B723 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = French; path = French.lproj/Localized.strings; sourceTree = SOURCE_ROOT; }; |
|
76 |
04E66D530FC5877F00C0E025 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = English; path = English.lproj/Info.plist; sourceTree = "<group>"; }; |
|
77 |
04E66D5D0FC5880500C0E025 /* French */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = French; path = French.lproj/Info.plist; sourceTree = "<group>"; }; |
|
72 |
78 |
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; |
73 |
79 |
27075E690D66B9A900A8F759 /* mercurial-logo-official.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = "mercurial-logo-official.icns"; sourceTree = "<group>"; }; |
74 |
80 |
270E509B0C56A5400069C9C6 /* HgDir.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HgDir.h; sourceTree = "<group>"; }; |
156 |
162 |
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; |
157 |
163 |
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; |
158 |
164 |
32CA4F630368D1EE00C91783 /* Murky_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Murky_Prefix.pch; sourceTree = "<group>"; }; |
159 |
8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; |
|
160 |
165 |
8D1107320486CEB800E47090 /* Murky.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Murky.app; sourceTree = BUILT_PRODUCTS_DIR; }; |
161 |
166 |
D095A40F0FBC0FD800512681 /* toolbar_discard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_discard.png; path = Resources/Icons/toolbar_discard.png; sourceTree = SOURCE_ROOT; }; |
162 |
167 |
D095A4100FBC0FD800512681 /* toolbar_refresh.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = toolbar_refresh.png; path = Resources/Icons/toolbar_refresh.png; sourceTree = SOURCE_ROOT; }; |
349 |
354 |
29B97317FDCFA39411CA2CEA /* Resources */ = { |
350 |
355 |
isa = PBXGroup; |
351 |
356 |
children = ( |
352 |
|
|
357 |
04E66D5A0FC587F200C0E025 /* Info.plist */, |
|
358 |
041D956E0FC1C8560084F5C0 /* Localized.strings */, |
|
353 |
359 |
27FEB4840FBB209D00290049 /* InfoPlist.strings */, |
354 |
360 |
27FEB4630FBB200600290049 /* Icons */, |
355 |
361 |
270E512A0C56AED10069C9C6 /* xmlstyle */, |
443 |
449 |
D095A5120FBC363100512681 /* status_removed.png in Resources */, |
444 |
450 |
D095A5170FBC376E00512681 /* status_null.png in Resources */, |
445 |
451 |
279089880FBFD9CC00CEA97E /* RevisionDescriptionTemplate.rtf in Resources */, |
452 |
041D95700FC1C8560084F5C0 /* Localized.strings in Resources */, |
|
453 |
04E66D5B0FC587F200C0E025 /* Info.plist in Resources */, |
|
446 |
454 |
); |
447 |
455 |
runOnlyForDeploymentPostprocessing = 0; |
448 |
456 |
}; |
485 |
493 |
/* End PBXSourcesBuildPhase section */ |
486 |
494 |
|
487 |
495 |
/* Begin PBXVariantGroup section */ |
496 |
041D956E0FC1C8560084F5C0 /* Localized.strings */ = { |
|
497 |
isa = PBXVariantGroup; |
|
498 |
children = ( |
|
499 |
041D956F0FC1C8560084F5C0 /* English */, |
|
500 |
043FB8650FC57E660055B723 /* French */, |
|
501 |
); |
|
502 |
name = Localized.strings; |
|
503 |
sourceTree = "<group>"; |
|
504 |
}; |
|
505 |
04E66D5A0FC587F200C0E025 /* Info.plist */ = { |
|
506 |
isa = PBXVariantGroup; |
|
507 |
children = ( |
|
508 |
04E66D530FC5877F00C0E025 /* English */, |
|
509 |
04E66D5D0FC5880500C0E025 /* French */, |
|
510 |
); |
|
511 |
name = Info.plist; |
|
512 |
sourceTree = "<group>"; |
|
513 |
}; |
|
488 |
514 |
279089860FBFD9CC00CEA97E /* RevisionDescriptionTemplate.rtf */ = { |
489 |
515 |
isa = PBXVariantGroup; |
490 |
516 |
children = ( |
547 |
573 |
isa = XCBuildConfiguration; |
548 |
574 |
buildSettings = { |
549 |
575 |
COPY_PHASE_STRIP = NO; |
550 |
INFOPLIST_FILE = Resources/ |
|
576 |
INFOPLIST_FILE = Resources/English.lproj/Info.plist; |
|
551 |
577 |
INSTALL_PATH = "$(HOME)/Applications"; |
552 |
578 |
PRODUCT_NAME = Murky; |
553 |
579 |
WRAPPER_EXTENSION = app; |
557 |
583 |
C01FCF4C08A954540054247B /* Release */ = { |
558 |
584 |
isa = XCBuildConfiguration; |
559 |
585 |
buildSettings = { |
560 |
INFOPLIST_FILE = Resources/ |
|
586 |
INFOPLIST_FILE = Resources/English.lproj/Info.plist; |
|
561 |
587 |
INSTALL_PATH = "$(HOME)/Applications"; |
562 |
588 |
PRODUCT_NAME = Murky; |
563 |
589 |
WRAPPER_EXTENSION = app; |
Up to file-list Resources/English.lproj/Info.plist:
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
3 |
<plist version="1.0"> |
|
4 |
<dict> |
|
5 |
<key>CFBundleDevelopmentRegion</key> |
|
6 |
<string>English</string> |
|
7 |
<key>CFBundleDocumentTypes</key> |
|
8 |
<array> |
|
9 |
<dict> |
|
10 |
<key>CFBundleTypeName</key> |
|
11 |
<string>Repository</string> |
|
12 |
<key>CFBundleTypeRole</key> |
|
13 |
<string>Editor</string> |
|
14 |
<key>LSItemContentTypes</key> |
|
15 |
<array> |
|
16 |
<string>public.folder</string> |
|
17 |
</array> |
|
18 |
<key>LSTypeIsPackage</key> |
|
19 |
<false/> |
|
20 |
<key>NSPersistentStoreTypeKey</key> |
|
21 |
<string>XML</string> |
|
22 |
</dict> |
|
23 |
</array> |
|
24 |
<key>CFBundleExecutable</key> |
|
25 |
<string>${EXECUTABLE_NAME}</string> |
|
26 |
<key>CFBundleIconFile</key> |
|
27 |
<string>mercurial-logo-official</string> |
|
28 |
<key>CFBundleIdentifier</key> |
|
29 |
<string>com.mooseyard.Murky</string> |
|
30 |
<key>CFBundleInfoDictionaryVersion</key> |
|
31 |
<string>6.0</string> |
|
32 |
<key>CFBundleName</key> |
|
33 |
<string>${PRODUCT_NAME}</string> |
|
34 |
<key>CFBundlePackageType</key> |
|
35 |
<string>APPL</string> |
|
36 |
<key>CFBundleSignature</key> |
|
37 |
<string>????</string> |
|
38 |
<key>CFBundleVersion</key> |
|
39 |
<string>0.4</string> |
|
40 |
<key>NSMainNibFile</key> |
|
41 |
<string>MainMenu</string> |
|
42 |
<key>NSPrincipalClass</key> |
|
43 |
<string>MYExceptionReportingApplication</string> |
|
44 |
</dict> |
|
45 |
</plist> |
Up to file-list Resources/French.lproj/Info.plist:
1 |
<?xml version="1.0" encoding="UTF-8"?> |
|
2 |
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|
3 |
<plist version="1.0"> |
|
4 |
<dict> |
|
5 |
<key>CFBundleDevelopmentRegion</key> |
|
6 |
<string>French</string> |
|
7 |
<key>CFBundleDocumentTypes</key> |
|
8 |
<array> |
|
9 |
<dict> |
|
10 |
<key>CFBundleTypeName</key> |
|
11 |
<string>Repository</string> |
|
12 |
<key>CFBundleTypeRole</key> |
|
13 |
<string>Editor</string> |
|
14 |
<key>LSItemContentTypes</key> |
|
15 |
<array> |
|
16 |
<string>public.folder</string> |
|
17 |
</array> |
|
18 |
<key>LSTypeIsPackage</key> |
|
19 |
<false/> |
|
20 |
<key>NSPersistentStoreTypeKey</key> |
|
21 |
<string>XML</string> |
|
22 |
</dict> |
|
23 |
</array> |
|
24 |
<key>CFBundleExecutable</key> |
|
25 |
<string>${EXECUTABLE_NAME}</string> |
|
26 |
<key>CFBundleIconFile</key> |
|
27 |
<string>mercurial-logo-official</string> |
|
28 |
<key>CFBundleIdentifier</key> |
|
29 |
<string>com.mooseyard.Murky</string> |
|
30 |
<key>CFBundleInfoDictionaryVersion</key> |
|
31 |
<string>6.0</string> |
|
32 |
<key>CFBundleName</key> |
|
33 |
<string>${PRODUCT_NAME}</string> |
|
34 |
<key>CFBundlePackageType</key> |
|
35 |
<string>APPL</string> |
|
36 |
<key>CFBundleSignature</key> |
|
37 |
<string>????</string> |
|
38 |
<key>CFBundleVersion</key> |
|
39 |
<string>0.4</string> |
|
40 |
<key>NSMainNibFile</key> |
|
41 |
<string>MainMenu</string> |
|
42 |
<key>NSPrincipalClass</key> |
|
43 |
<string>MYExceptionReportingApplication</string> |
|
44 |
</dict> |
|
45 |
</plist> |
Up to file-list Source/HgDir.m:
183 |
183 |
for( NSString *line in statusLines ) { |
184 |
184 |
if( line.length > 0 ) { |
185 |
185 |
if( line.length<3 || [line characterAtIndex: 1] != ' ' ) { |
186 |
Warn( |
|
186 |
Warn(NSLocalizedStringFromTable(@"Unknown line from hg status: \"%@\"", @"Localized", nil),line); |
|
187 |
187 |
continue; |
188 |
188 |
} |
189 |
189 |
HgStatus status = (HgStatus) [line characterAtIndex: 0]; |
194 |
194 |
continue; |
195 |
195 |
else if (status == kNotTracked && [path hasSuffix: @".orig"]) { |
196 |
196 |
// Ignore .orig files not in repo; they're backups from 'hg revert'. |
197 |
LogTo(HgFile, |
|
197 |
LogTo(HgFile,NSLocalizedStringFromTable(@"Ignoring backup: %@", @"Localized", nil), line); |
|
198 |
198 |
continue; |
199 |
199 |
} |
200 |
200 |
// OK, add/update it: |
Up to file-list Source/HgLogOperation.m:
| … | … | @@ -162,7 +162,7 @@ static NSArray* arrayForXPath( NSXMLElem |
162 |
162 |
NSError *error = nil; |
163 |
163 |
NSArray *nodes = [xml nodesForXPath: xpath error: &error]; |
164 |
164 |
if( nodes == nil ) { |
165 |
Warn( |
|
165 |
Warn(NSLocalizedStringFromTable(@"HgLogOperation: Couldn't parse XPath '%@': %@", @"Localized", nil),xpath,[error localizedDescription]); |
|
166 |
166 |
} |
167 |
167 |
return nodes; |
168 |
168 |
} |
| … | … | @@ -206,12 +206,12 @@ static BOOL identifierFromAttribute( NSX |
206 |
206 |
unsigned len = str.length; |
207 |
207 |
if( len != 40 ) { |
208 |
208 |
if( len>0 ) |
209 |
Warn( |
|
209 |
Warn(NSLocalizedStringFromTable(@"Revision ID has wrong length (%u)", @"Localized", nil),len); |
|
210 |
210 |
return NO; |
211 |
211 |
} |
212 |
212 |
const char *cStr = [str cStringUsingEncoding: NSASCIIStringEncoding]; |
213 |
213 |
if( ! cStr ) { |
214 |
Warn( |
|
214 |
Warn(NSLocalizedStringFromTable(@"Invalid revision ID '%@'", @"Localized", nil),str); |
|
215 |
215 |
return NO; |
216 |
216 |
} |
217 |
217 |
for( size_t i=0; i<20; i++ ) |
| … | … | @@ -233,7 +233,7 @@ static NSDate* parseDate( NSString *hgDa |
233 |
233 |
return [NSDate dateWithTimeIntervalSince1970: time]; |
234 |
234 |
} |
235 |
235 |
} |
236 |
Warn( |
|
236 |
Warn(NSLocalizedStringFromTable(@"Failed to parse date '%@'", @"Localized", nil),hgDateStr); |
|
237 |
237 |
} |
238 |
238 |
return nil; |
239 |
239 |
} |
| … | … | @@ -298,14 +298,14 @@ static NSDate* parseDate( NSString *hgDa |
298 |
298 |
error: &error]; |
299 |
299 |
if( ! xml ) { |
300 |
300 |
[xmlData writeToFile: @"/tmp/Murky.out" options: 0 error: nil]; |
301 |
return [self makeError: |
|
301 |
return [self makeError: NSLocalizedStringFromTable(@"HgLogOperation couldn't parse XML: %@", @"Localized", nil),error]; |
|
302 |
302 |
} |
303 |
303 |
NSXMLElement *root = xml.rootElement; |
304 |
304 |
|
305 |
305 |
// Build array of HgRevision from the <changeset> elements: |
306 |
306 |
NSArray *changesets = [root nodesForXPath: @"/repository/changeset" error: &error]; |
307 |
307 |
if( ! changesets ) |
308 |
return [self makeError: |
|
308 |
return [self makeError: NSLocalizedStringFromTable(@"HgLogOperation couldn't get changesets from XML: %@", @"Localized", nil),error]; |
|
309 |
309 |
|
310 |
310 |
// Build the _revisions array from the XML changeset info: |
311 |
311 |
_revisions = [NSMutableArray array]; |
| … | … | @@ -314,7 +314,7 @@ static NSDate* parseDate( NSString *hgDa |
314 |
314 |
int revNo = [[[changeset attributeForName: @"rev"] stringValue] intValue]; |
315 |
315 |
HgRevisionID nodeID; |
316 |
316 |
if( ! identifierFromAttribute(changeset,@"node",&nodeID) ) |
317 |
return [self makeError: |
|
317 |
return [self makeError: NSLocalizedStringFromTable(@"HgLogOperation couldn't get changeset ID for rev #%i", @"Localized", nil),revNo]; |
|
318 |
318 |
HgRevision *revision = [_repository revisionWithID: nodeID]; |
319 |
319 |
if( !revision ) { |
320 |
320 |
revision = [[HgRevision alloc] initWithRepository: _repository |
Up to file-list Source/HgOperation.m:
| … | … | @@ -28,7 +28,7 @@ static NSString* runShell( NSString* com |
28 |
28 |
return [sh.output stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]]; |
29 |
29 |
else { |
30 |
30 |
if (outError) |
31 |
Warn( |
|
31 |
Warn(NSLocalizedStringFromTable(@"Shell command '%@' failed with output: '%@'", @"Localized", nil), command,sh.output); |
|
32 |
32 |
return nil; |
33 |
33 |
} |
34 |
34 |
} |
| … | … | @@ -76,7 +76,7 @@ static NSString* runShell( NSString* com |
76 |
76 |
|
77 |
77 |
// As a last resort, guess that it's /usr/local/bin/hg: |
78 |
78 |
hgPath = @"/usr/local/bin/hg"; |
79 |
Warn( |
|
79 |
Warn(NSLocalizedStringFromTable(@"Couldn't locate hg via shell ... assuming it's at %@", @"Localized", nil), hgPath); |
|
80 |
80 |
return hgPath; |
81 |
81 |
} |
82 |
82 |
|
| … | … | @@ -107,7 +107,7 @@ static NSString* getAbsolutePath( id dir |
107 |
107 |
_subcommand = subcommand; |
108 |
108 |
if( dir ) { |
109 |
109 |
NSString *absPath = getAbsolutePath(dir); |
110 |
Assert(absPath.length>0, |
|
110 |
Assert(absPath.length>0,NSLocalizedStringFromTable(@"Bad absolutePath for %@ %@", @"Localized", nil),[dir class],dir); |
|
111 |
111 |
self.currentDirectoryPath = absPath; |
112 |
112 |
} |
113 |
113 |
} |
Up to file-list Source/HgRepository.m:
| … | … | @@ -86,7 +86,7 @@ static NSString* stringForURL( NSURL *ur |
86 |
86 |
target: self action: @selector(_dirChanged:)]; |
87 |
87 |
_watcher.latency = 5; |
88 |
88 |
if( ! [_watcher start] ) |
89 |
Warn( |
|
89 |
Warn(NSLocalizedStringFromTable(@"HgRepository: Couldn't start MYDirectoryWatcher on %@", @"Localized", nil),_absolutePath); |
|
90 |
90 |
Log(@"Opened %@", self); |
91 |
91 |
} |
92 |
92 |
return self; |
| … | … | @@ -172,7 +172,7 @@ static NSString* stringForURL( NSURL *ur |
172 |
172 |
if( [path hasPrefix: changedPath] ) |
173 |
173 |
return; // ...or an ancestor of it |
174 |
174 |
} |
175 |
LogTo(HgRepository, |
|
175 |
LogTo(HgRepository, NSLocalizedStringFromTable(@"dir changed: %@", @"Localized", nil), event.path); |
|
176 |
176 |
if( _changedPaths.count==0 ) |
177 |
177 |
[self performSelector: @selector(_updateChangedDirs) withObject: nil afterDelay: 0.25]; |
178 |
178 |
[_changedPaths addObject: path]; |
| … | … | @@ -181,7 +181,7 @@ static NSString* stringForURL( NSURL *ur |
181 |
181 |
|
182 |
182 |
- (void) _updateChangedDirs |
183 |
183 |
{ |
184 |
LogTo(HgRepository, |
|
184 |
LogTo(HgRepository, NSLocalizedStringFromTable(@"Updating changed dirs %@", @"Localized", nil),[[_changedPaths allObjects] componentsJoinedByString: @", "]); |
|
185 |
185 |
NSSet *changedPaths = _changedPaths; |
186 |
186 |
_changedPaths = [NSMutableSet set]; |
187 |
187 |
|
| … | … | @@ -285,7 +285,7 @@ static NSString* stringForURL( NSURL *ur |
285 |
285 |
int curTip = _revisions.count>0 ?self.tipRevision.localNumber :-1; |
286 |
286 |
if( tip != curTip ) { |
287 |
287 |
// Revisions have changed! |
288 |
LogTo(HgRepository, |
|
288 |
LogTo(HgRepository,NSLocalizedStringFromTable(@"Tip changed from %i to %i ... updating revisions", @"Localized", nil), curTip,tip); |
|
289 |
289 |
|
290 |
290 |
// Run "hg log" to get all revisions of this repository: |
291 |
291 |
if (!_revisions) |
| … | … | @@ -301,7 +301,7 @@ static NSString* stringForURL( NSURL *ur |
301 |
301 |
if( ! [op run] ) |
302 |
302 |
return NO; |
303 |
303 |
Assert([[op.revisions objectAtIndex: 0] localNumber]==curTip+1, |
304 |
|
|
304 |
NSLocalizedStringFromTable(@"Unexpected revision numbers from log: expected starting %u, got %u", @"Localized", nil), |
|
305 |
305 |
curTip+1, [[op.revisions objectAtIndex: 0] localNumber]); |
306 |
306 |
|
307 |
307 |
// Add the new revisions, but before the uncommitted one if any: |
| … | … | @@ -338,10 +338,10 @@ static NSString* stringForURL( NSURL *ur |
338 |
338 |
unsigned nRevisions = _revisions.count; |
339 |
339 |
if (nRevisions > 0 && [[_revisions lastObject] isUncommitted]) |
340 |
340 |
nRevisions--; |
341 |
Assert(revNoRange.location < nRevisions, |
|
341 |
Assert(revNoRange.location < nRevisions, NSLocalizedStringFromTable(@"Invalid start revision", @"Localized", nil)); |
|
342 |
342 |
revNoRange.length = MIN(revNoRange.length, nRevisions - revNoRange.location); |
343 |
343 |
|
344 |
LogTo(HgRepository, |
|
344 |
LogTo(HgRepository, NSLocalizedStringFromTable(@"Getting details of revisions [%u..%u]", @"Localized", nil), |
|
345 |
345 |
revNoRange.location, revNoRange.location+revNoRange.length-1); |
346 |
346 |
HgLogOperation *op = [[HgLogOperation alloc] initWithRepository: self |
347 |
347 |
file: nil |
| … | … | @@ -452,7 +452,7 @@ static NSString* stringForURL( NSURL *ur |
452 |
452 |
NSString *root = [[self class] findRootOf: dstPath localPath: NULL]; |
453 |
453 |
if( root ) { |
454 |
454 |
NSError *error; |
455 |
MYMiscError(&error, |
|
455 |
MYMiscError(&error, NSLocalizedStringFromTable(@"The path to clone into is already inside a Mercurial repository at %@", @"Localized", nil),root); |
|
456 |
456 |
return [[HgOperation alloc] initWithError: error]; |
457 |
457 |
} |
458 |
458 |
} |
| … | … | @@ -509,7 +509,7 @@ static NSString* stringForURL( NSURL *ur |
509 |
509 |
{ |
510 |
510 |
NSArray *args = nil; |
511 |
511 |
if( rev ) { |
512 |
Assert(!rev.isUncommitted, |
|
512 |
Assert(!rev.isUncommitted,NSLocalizedStringFromTable(@"Can't update to uncommitted revision", @"Localized", nil)); |
|
513 |
513 |
args = [NSArray arrayWithObjects: @"--rev", rev.identifierString, nil]; |
514 |
514 |
} |
515 |
515 |
HgOperation *op = [[HgOperation alloc] initWithDirectory: self |
Up to file-list Source/HgRevision.m:
| … | … | @@ -335,7 +335,7 @@ static void replaceAndLink(NSMutableAttr |
335 |
335 |
HgDir *root = [[HgDir alloc] initRootOfRevision: self]; |
336 |
336 |
NSError *error; |
337 |
337 |
if( ! [self updateStatus: root error: &error] ) |
338 |
Warn( |
|
338 |
Warn(NSLocalizedStringFromTable(@"-[HgRevision root] failed! %@", @"Localized", nil),error); |
|
339 |
339 |
_root = root; |
340 |
340 |
} |
341 |
341 |
return _root; |
Up to file-list Source/HgUncommittedRevision.m:
34 |
34 |
if (_comment.length) |
35 |
35 |
return _comment; |
36 |
36 |
else if (_root.isUncommitted) |
37 |
return |
|
37 |
return NSLocalizedStringFromTable(@"--locally modified--", @"Localized", nil); |
|
38 |
38 |
else |
39 |
return |
|
39 |
return NSLocalizedStringFromTable(@"(no changes)", @"Localized", nil); |
|
40 |
40 |
} |
41 |
41 |
|
42 |
42 |
- (void) setComment: (NSString*)str |
Up to file-list Source/MercurialApp.m:
| … | … | @@ -107,8 +107,8 @@ MercurialApp *gMercurialApp; |
107 |
107 |
if( dstURL.isFileURL ) |
108 |
108 |
[self openRepository: dstURL.path remember: YES]; |
109 |
109 |
else |
110 |
NSRunInformationalAlertPanel(@"Cloned Repository", |
|
111 |
@"Successfully created a cloned repository at \n\n%@", |
|
110 |
NSRunInformationalAlertPanel(NSLocalizedStringFromTable(@"Cloned Repository", @"Localized", nil), |
|
111 |
NSLocalizedStringFromTable(@"Successfully created a cloned repository at \n\n%@", @"Localized", nil), |
|
112 |
112 |
nil, nil, nil, |
113 |
113 |
dstURL.absoluteString); |
114 |
114 |
} |
| … | … | @@ -150,9 +150,9 @@ MercurialApp *gMercurialApp; |
150 |
150 |
HgOperation *op = [[HgOperation alloc] initWithDirectory: NSHomeDirectory() command: @"--version", nil]; |
151 |
151 |
NSError *error; |
152 |
152 |
if( ! [op run: &error] ) { |
153 |
NSRunCriticalAlertPanel(@"Can't call Mercurial", |
|
154 |
@"Unable to find or run the 'hg' command.\n\n%@", |
|
155 |
|
|
153 |
NSRunCriticalAlertPanel(NSLocalizedStringFromTable(@"Can't call Mercurial", @"Localized", nil), |
|
154 |
NSLocalizedStringFromTable(@"Unable to find or run the 'hg' command.\n\n%@", @"Localized", nil), |
|
155 |
NSLocalizedStringFromTable(@"Sorry", @"Localized", nil), nil, nil, |
|
156 |
156 |
error.localizedDescription); |
157 |
157 |
[NSApp terminate]; |
158 |
158 |
return; |
| … | … | @@ -164,7 +164,7 @@ MercurialApp *gMercurialApp; |
164 |
164 |
for( NSString *path in [[NSUserDefaults standardUserDefaults] objectForKey: kPrefOpenRepositories]) { |
165 |
165 |
@try{ |
166 |
166 |
[self openRepository: path remember: NO]; |
167 |
}catchAndReport( |
|
167 |
}catchAndReport(NSLocalizedStringFromTable(@"Exception re-opening recent repository %@", @"Localized", nil), path) |
|
168 |
168 |
} |
169 |
169 |
} |
170 |
170 |
Up to file-list Source/ProjectsController.m:
| … | … | @@ -359,7 +359,7 @@ static NSMutableArray *sDraggingProjects |
359 |
359 |
|
360 |
360 |
- (IBAction) addProject: (id)sender |
361 |
361 |
{ |
362 |
[_root addChild: [HgProject projectWithName: |
|
362 |
[_root addChild: [HgProject projectWithName: NSLocalizedStringFromTable(@"untitled project", @"Localized", nil)]]; |
|
363 |
363 |
[self changed]; |
364 |
364 |
} |
365 |
365 |
Up to file-list Source/RepoController.m:
69 |
69 |
{ |
70 |
70 |
BOOL isDir; |
71 |
71 |
if( ! [[NSFileManager defaultManager] fileExistsAtPath: path isDirectory: &isDir] ) { |
72 |
MYMiscError(error, |
|
72 |
MYMiscError(error, NSLocalizedStringFromTable(@"No such directory %@", @"Localized", nil),path); |
|
73 |
73 |
return nil; |
74 |
74 |
} else if( ! isDir ) { |
75 |
MYMiscError(error, |
|
75 |
MYMiscError(error, NSLocalizedStringFromTable(@"%@ is not a directory", @"Localized", nil),path); |
|
76 |
76 |
return nil; |
77 |
77 |
} |
78 |
78 |
HgRepository *repo = [[HgRepository alloc] initWithPath: path localPath: NULL]; |
79 |
79 |
if( ! repo ) { |
80 |
int result = NSRunAlertPanel(@"Convert to Mercurial repository?", |
|
81 |
@"The directory <%@> is not already a Mercurial repository. " |
|
82 |
"Would you like to make it one?", |
|
83 |
@"Convert", @"Cancel", nil, |
|
80 |
int result = NSRunAlertPanel(NSLocalizedStringFromTable(@"Convert to Mercurial repository?", @"Localized", nil), |
|
81 |
NSLocalizedStringFromTable(@"The directory <%@> is not already a Mercurial repository. Would you like to make it one?", @"Localized", nil), |
|
82 |
NSLocalizedStringFromTable(@"Cancel", @"Localized", nil), nil, |
|
84 |
83 |
path); |
85 |
84 |
if( result != NSOKButton ) { |
86 |
85 |
*error = nil; |
166 |
165 |
NSString *uncommittedComments = [_settings objectForKey: @"UncommittedComments"]; |
167 |
166 |
if( uncommittedComments ) { |
168 |
167 |
HgUncommittedRevision *last = _repo.modifiedRevision; |
169 |
if( last ) |
|
168 |
if( last ) |
|
170 |
169 |
last.formattedDescription = uncommittedComments; |
171 |
[self _updateInfoView]; |
|
172 |
} |
|
173 |
170 |
} |
174 |
171 |
|
175 |
172 |
[self tableView: _revisionTable didClickTableColumn: nil]; // set up graph column |
223 |
220 |
- (void) saveSettings |
224 |
221 |
{ |
225 |
222 |
if( _settingsChanged ) { |
226 |
Log |
|
223 |
Log(@"RepoController: Saving settings"); |
|
227 |
224 |
[_repo ignoreNextFileChanges]; |
228 |
225 |
[_settings writeToFile: [_repo.absolutePath stringByAppendingPathComponent: kSettingsFilePath] |
229 |
226 |
atomically: YES]; |
235 |
232 |
{ |
236 |
233 |
id oldValue = [_settings objectForKey: setting]; |
237 |
234 |
if( value!=oldValue && ![value isEqual: oldValue] ) { |
238 |
Log |
|
235 |
Log(@"Setting: %@ = %@",setting,value); |
|
239 |
236 |
if( value ) |
240 |
237 |
[_settings setObject: value forKey: setting]; |
241 |
238 |
else |
322 |
319 |
if( showUnclean ) { |
323 |
320 |
//_tree.leafKeyPath = @"isNonRepository"; |
324 |
321 |
contentPath = @"selection.uncleanFiles"; |
325 |
[_hideShowUnmodifiedToolbarItem setLabel: |
|
322 |
[_hideShowUnmodifiedToolbarItem setLabel:NSLocalizedStringFromTable(@"Show Unmodified", @"Localized", nil)]; |
|
326 |
323 |
[_hideShowUnmodifiedToolbarItem setPaletteLabel:@"Show Unmodified Files"]; |
327 |
324 |
} else { |
328 |
325 |
//_tree.leafKeyPath = @"isFile"; |
329 |
326 |
contentPath = @"selection.rootAsArray"; |
330 |
[_hideShowUnmodifiedToolbarItem setLabel: |
|
327 |
[_hideShowUnmodifiedToolbarItem setLabel:NSLocalizedStringFromTable(@"Hide Unmodified", @"Localized", nil)]; |
|
331 |
328 |
[_hideShowUnmodifiedToolbarItem setPaletteLabel:@"Hide Unmodified Files"]; |
332 |
329 |
} |
333 |
330 |
|
517 |
514 |
- (void) _updateInfoView |
518 |
515 |
{ |
519 |
516 |
HgRevision *revision = self.selectedRevision; |
520 |
NSAttributedString *text = revision.richFormattedDescription; |
|
521 |
if (text) |
|
522 |
[_infoView.textStorage setAttributedString: text]; |
|
523 |
else |
|
524 |
|
|
517 |
NSString *text = revision.formattedDescription ?: @""; |
|
518 |
_infoView.string = text; |
|
525 |
519 |
[_infoView setEditable: revision.isUncommitted]; |
526 |
520 |
_infoView.drawsBackground = revision.isUncommitted; |
527 |
[_infoView didChangeText]; |
|
528 |
521 |
[_infoView setNeedsDisplay: YES]; |
529 |
522 |
} |
530 |
523 |
|
598 |
591 |
|
599 |
592 |
- (void) _revisionSelectionChanged: (NSTreeController*)controller change: (NSDictionary*)change |
600 |
593 |
{ |
601 |
|
|
594 |
//Log(@"Revision Selection = %@",self.selectedRevision); |
|
602 |
595 |
[self _updateInfoView]; |
603 |
596 |
[self _updateWindowTitle]; |
604 |
597 |
} |
Up to file-list Source/RepoController_Actions.m:
265 |
265 |
return; |
266 |
266 |
} |
267 |
267 |
_progressMessageField.stringValue = message; |
268 |
_progressStopButton.title = |
|
268 |
_progressStopButton.title = NSLocalizedStringFromTable(@"Stop", @"Localized", nil); |
|
269 |
269 |
NSView *superview = _progressStopButton.superview; |
270 |
270 |
[_progressStopButton removeFromSuperview]; |
271 |
271 |
_progressStopButton.keyEquivalent = @"\033"; // esc |
285 |
285 |
|
286 |
286 |
|
287 |
287 |
- (void) _currentOperationStopped { |
288 |
_progressStopButton.title = |
|
288 |
_progressStopButton.title = NSLocalizedStringFromTable(@"Close", @"Localized", nil); |
|
289 |
289 |
_progressStopButton.keyEquivalent = @"\r"; |
290 |
290 |
} |
291 |
291 |
|
| … | … | @@ -359,13 +359,13 @@ static BOOL isFileStatus( id file, void |
359 |
359 |
[_outline selectRow: row byExtendingSelection: YES]; |
360 |
360 |
} |
361 |
361 |
|
362 |
NSBeginCriticalAlertSheet(@"Some files aren't in the repository", |
|
363 |
@"OK", @"Cancel", nil, |
|
362 |
NSBeginCriticalAlertSheet(NSLocalizedStringFromTable(@"Some files aren't in the repository", @"Localized", nil), |
|
363 |
NSLocalizedStringFromTable(@"OK", @"Localized", nil), NSLocalizedStringFromTable(@"Cancel", @"Localized", nil), nil, |
|
364 |
364 |
self.window, self, |
365 |
365 |
@selector(_endCommitWarnSheet:resultCode:context:),NULL, |
366 |
366 |
files, |
367 |
@"%i file(s) you're trying to check in have not yet " |
|
368 |
"been added to the repository (status is '?'). These won't be checked in. Proceed anyway?", |
|
367 |
NSLocalizedStringFromTable(@"%i file(s) you're trying to check in have not yet " |
|
368 |
"been added to the repository (status is '?'). These won't be checked in. Proceed anyway?", @"Localized", nil), |
|
369 |
369 |
unknown.count); |
370 |
370 |
} |
371 |
371 |
} |
| … | … | @@ -427,24 +427,24 @@ static NSString* kTransferOpTitle[] = {@ |
427 |
427 |
NSString *defaultURL, *desc; |
428 |
428 |
switch( op ) { |
429 |
429 |
case kHgPush: |
430 |
desc = |
|
430 |
desc = NSLocalizedStringFromTable(@"Push revisions to repository at URL/file:", @"Localized", nil); |
|
431 |
431 |
defaultURL = [_repo.configFile valueForKey: @"default-push" inStanza: @"paths"]; |
432 |
432 |
if( ! defaultURL ) |
433 |
433 |
defaultURL = [_repo.configFile valueForKey: @"default" inStanza: @"paths"]; |
434 |
434 |
break; |
435 |
435 |
case kHgPull: |
436 |
desc = |
|
436 |
desc = NSLocalizedStringFromTable(@"Pull revisions from repository at URL/file:", @"Localized", nil); |
|
437 |
437 |
defaultURL = [_repo.configFile valueForKey: @"default" inStanza: @"paths"]; |
438 |
438 |
break; |
439 |
439 |
case kHgClone: |
440 |
desc = |
|
440 |
desc = NSLocalizedStringFromTable(@"Clone repository to URL/file:", @"Localized", nil); |
|
441 |
441 |
defaultURL = _repo.absolutePath; |
442 |
442 |
if( [defaultURL hasSuffix: @"/"] ) |
443 |
443 |
defaultURL = [defaultURL substringToIndex: defaultURL.length-1]; |
444 |
444 |
defaultURL = [defaultURL stringByAppendingString: @"_clone"]; |
445 |
445 |
break; |
446 |
446 |
default: |
447 |
Assert(NO, |
|
447 |
Assert(NO,NSLocalizedStringFromTable(@"Invalid op %i", @"Localized", nil),op); |
|
448 |
448 |
return; |
449 |
449 |
} |
450 |
450 |
[_pushURLField setStringValue: (defaultURL ?:@"")]; |
| … | … | @@ -555,11 +555,11 @@ static NSString* kTransferOpTitle[] = {@ |
555 |
555 |
{ |
556 |
556 |
NSArray *files = self._uncommittedSelectedFiles; |
557 |
557 |
if( files ) |
558 |
NSBeginCriticalAlertSheet(@"Remove files from repository?", |
|
559 |
@"Remove", @"Cancel", nil, |
|
558 |
NSBeginCriticalAlertSheet(NSLocalizedStringFromTable(@"Remove files from repository?", @"Localized", nil), |
|
559 |
NSLocalizedStringFromTable(@"Remove", @"Localized", nil), NSLocalizedStringFromTable(@"Cancel", @"Localized", nil), nil, |
|
560 |
560 |
self.window,self, |
561 |
561 |
@selector(_removeSheetDidEnd:returnCode:context:), NULL, files, |
562 |
|
|
562 |
NSLocalizedStringFromTable(@"Are you sure you want to remove the selected files from the repository?", @"Localized", nil)); |
|
563 |
563 |
} |
564 |
564 |
|
565 |
565 |
- (void) _removeSheetDidEnd: (NSPanel*)sheet returnCode: (int)returnCode context: (void*)context |
| … | … | @@ -578,11 +578,11 @@ static NSString* kTransferOpTitle[] = {@ |
578 |
578 |
{ |
579 |
579 |
NSArray *files = self._uncommittedSelectedFiles; |
580 |
580 |
if( files ) |
581 |
NSBeginCriticalAlertSheet(@"Discard file changes?", |
|
582 |
@"Discard", @"Cancel", nil, |
|
581 |
NSBeginCriticalAlertSheet(NSLocalizedStringFromTable(@"Discard file changes?", @"Localized", nil), |
|
582 |
NSLocalizedStringFromTable(@"Discard", @"Localized", nil), NSLocalizedStringFromTable(@"Cancel", @"Localized", nil), nil, |
|
583 |
583 |
self.window,self, |
584 |
584 |
@selector(_discardSheetDidEnd:returnCode:context:), NULL, files, |
585 |
|
|
585 |
NSLocalizedStringFromTable(@"Are you sure you want to discard all uncommitted changes to the selected files?", @"Localized", nil)); |
|
586 |
586 |
} |
587 |
587 |
|
588 |
588 |
- (void) _discardSheetDidEnd: (NSPanel*)sheet returnCode: (int)returnCode context: (void*)context |
| … | … | @@ -610,7 +610,7 @@ static NSString* kTransferOpTitle[] = {@ |
610 |
610 |
NSString *output; |
611 |
611 |
if( [_repo updateToRevision: rev output: &output error: &error] ) { |
612 |
612 |
if( ! output ) output = @""; |
613 |
NSBeginInformationalAlertSheet( |
|
613 |
NSBeginInformationalAlertSheet(NSLocalizedStringFromTable(@"Update Completed", @"Localized", nil), |
|
614 |
614 |
nil, nil, nil, self.window, nil, NULL, NULL, NULL, |
615 |
615 |
@"%@", output); |
616 |
616 |
} else |
| … | … | @@ -631,11 +631,11 @@ static NSString* kTransferOpTitle[] = {@ |
631 |
631 |
NSBeep(); |
632 |
632 |
return; |
633 |
633 |
} |
634 |
NSBeginCriticalAlertSheet(@"Update to revision?", |
|
635 |
@"Update", @"Cancel", nil, |
|
634 |
NSBeginCriticalAlertSheet(NSLocalizedStringFromTable(@"Update to revision?",@"Localized", nil), |
|
635 |
NSLocalizedStringFromTable(@"Update", @"Localized", nil), NSLocalizedStringFromTable(@"Cancel", @"Localized", nil), nil, |
|
636 |
636 |
self.window,self, |
637 |
637 |
@selector(_updateSheetDidEnd:returnCode:context:), NULL, rev, |
638 |
|
|
638 |
NSLocalizedStringFromTable(@"Are you sure you want to update the source tree to revision %i?", @"Localized", nil), |
|
639 |
639 |
rev.localNumber); |
640 |
640 |
} |
641 |
641 |
Up to file-list Source/RevisionGraphColumn.m:
| … | … | @@ -26,8 +26,8 @@ enum { |
26 |
26 |
|
27 |
27 |
- (BOOL) _addLineFrom: (unsigned)rev0 to: (unsigned)rev1 |
28 |
28 |
{ |
29 |
Assert(rev0>=0&&rev0<_nRevisions,@"bad rev0: %i",rev0); |
|
30 |
Assert(rev1>rev0&&rev1<_nRevisions,@"bad rev1: %i",rev1); |
|
29 |
Assert(rev0>=0&&rev0<_nRevisions,NSLocalizedStringFromTable(@"bad rev0: %i", @"Localized", nil),rev0); |
|
30 |
Assert(rev1>rev0&&rev1<_nRevisions,NSLocalizedStringFromTable(@"bad rev1: %i", @"Localized", nil),rev1); |
|
31 |
31 |
|
32 |
32 |
UInt64 used = 0; |
33 |
33 |
for( unsigned r=rev0+1; r<rev1; r++ ) |
| … | … | @@ -149,7 +149,7 @@ static void drawCorner( float x0, float |
149 |
149 |
{ |
150 |
150 |
if( revNo >= _nRevisions ) |
151 |
151 |
return; |
152 |
Assert(revNo>=0, |
|
152 |
Assert(revNo>=0, NSLocalizedStringFromTable(@"Illegal revision number %i", @"Localized", nil),revNo); |
|
153 |
153 |
|
154 |
154 |
[[NSColor blackColor] set]; |
155 |
155 |
|
| … | … | @@ -226,7 +226,7 @@ static void drawCorner( float x0, float |
226 |
226 |
BOOL first = YES; |
227 |
227 |
for( int x=0; x<_maxWidth; x++ ) { |
228 |
228 |
int n = _array[r*_maxWidth + x]; |
229 |
Assert(n>=0 && n<8, |
|
229 |
Assert(n>=0 && n<8,NSLocalizedStringFromTable(@"Illegal n=%i", @"Localized", nil),n); |
|
230 |
230 |
if( first ) { |
231 |
231 |
putchar(kAsciiGraphic[n]); |
232 |
232 |
if( n & kDotMask ) |
Up to file-list Source/URLFormatter.m:
43 |
43 |
} else if( [str hasPrefix: @"/"] ) { |
44 |
44 |
*obj = [NSURL fileURLWithPath: str]; |
45 |
45 |
if( ! *obj ) |
46 |
error = |
|
46 |
error = NSLocalizedStringFromTable(@"Invalid filesystem path", @"Localized", nil); |
|
47 |
47 |
} else { |
48 |
48 |
NSURL *url = [NSURL URLWithString: str]; |
49 |
49 |
NSString *scheme = [url scheme]; |
57 |
57 |
url = nil; |
58 |
58 |
} |
59 |
59 |
if( ! url || ! [url path] || url.host.length==0 ) { |
60 |
error = |
|
60 |
error = NSLocalizedStringFromTable(@"Invalid URL", @"Localized", nil); |
|
61 |
61 |
} else if( _allowedSchemes && ! [_allowedSchemes containsObject: scheme] ) { |
62 |
error = [ |
|
62 |
error = [NSLocalizedStringFromTable(@"URL protocol must be %@", @"Localized", nil) stringByAppendingString: |
|
63 |
63 |
[_allowedSchemes componentsJoinedByString: @", "]]; |
64 |
64 |
} |
65 |
65 |
*obj = url; |
