| " Example for use of GNU gettext. |
| This file is in the public domain. |
| |
| Source code of the GNU Smalltalk program. |
| " |
| |
| "Unfortunately the PackageLoader method fileInPackage: is extra verbose: |
| It outputs 'Loading package I18N'. This will be fixed in smalltalk-2.2. |
| |
| PackageLoader fileInPackage: 'I18N' ! |
| |
| In the meantime, we use this workaround." |
| |
| | saved sink | |
| saved := Transcript message. |
| sink := WriteStream with: String new. |
| Transcript message: sink -> #nextPutAll:. |
| PackageLoader fileInPackage: 'I18N'. |
| Transcript message: saved. |
| ! |
| |
| Object subclass: #Main |
| instanceVariableNames: '' |
| classVariableNames: 'NLS' |
| poolDictionaries: '' |
| category: 'Program' |
| ! |
| !Main methodsFor: 'running'! |
| run |
| NLS := I18N Locale default messages domain: 'hello-smalltalk' localeDirectory: '@localedir@'. |
| Transcript showCr: (NLS ? 'Hello, world!'). |
| Transcript showCr: ((NLS ? 'This program is running as process number %1.') bindWith: self getpid). |
| ! |
| |
| |
| "Unfortunately I cannot define getpid like this - it gives |
| 'C function getpid not defined'. |
| |
| SystemDictionary defineCFunc: 'getpid' |
| withSelectorArgs: 'getpid' |
| returning: #int |
| args: #() |
| ! |
| |
| So let's define it through an external process." |
| |
| !Main methodsFor: 'auxiliary stuff'! |
| getpid |
| | stream pid | |
| stream := FileDescriptor popen: 'echo $PPID' dir: #read. |
| pid := stream contents asNumber. |
| stream close. |
| ^ pid |
| ! |
| ! |
| |
| |
| Main new run! |