ResFind is FREEWARE en mag vrij verspreid en gebruikt worden, ook voor commerciele programma's, op voorwaarde dat in de !Help-file of -applicatie de vermelding van ons copyright plus adres staat, en dat de applicatie de gecomprimeerde versie van ResFind (d.w.z. niet ResFindSrc) bevat. Verder dient de programma-documentatie een toelichting op ResFind te bevatten - een voorbeeld hiervoor staat aan het einde van deze file.
Het is nadrukkelijk verboden om uit DIT ARCHIEF files te verwijderen. Het toevoegen van vertalingen in andere talen is echter welkom. Uitzondering: het verspreiden van Resfind zoals beschreven in de vorige alinea.
Wij zouden het op prijs stellen als u ResFind verder verspreidt, zodat (eindelijk) een standaard voor meertalig programmeren kan ontstaan.
Acorn ondersteunt meertalig programmeren door middel van de MSGTRANS module. Veel programmeurs gebruiken deze module om de Messages (= mededelingen) in te lezen. Er zijn zelfs enkele (Engelse) programma's die niet alleen Engelse, maar ook Messages in andere talen kennen. Ik ken echter maar één programma (buiten degene die ResFind gebruiken) dat automatisch een andere taal gebruikt als het in een andere omgeving werkt: Impression.
Deze toestand is voor gewone gebruikers zeker niet optimaal. In de meeste gevallen moet de gebruiker zelf actie ondernemen om Messages in zijn taal te activeren, zelfs als die in het programma al voorhanden zijn.
Op dit punt komt ResFind van pas. Het probeert de (voor de gebruiker) meest geschikte taal in te stellen. Natuurlijk is het niet helderziend, maar als de configuratie van de computer goed is ingesteld, moet het werken.
Hoe werkt het?
==============
Resfind vereist dat de programmeur alle taalafhankelijke Resources, dus niet alleen Messages maar ook Templates, documentatie enz., in een directory-struktuur opslaat, die de betreffende taal weergeeft. Daarvoor bevindt zich binnen de applicatie een directory 'Resources', waarin voor iedere ondersteunde taal weer een directory aanwezig is. Deze directory heeft de naam van het betreffende land (bijv. UK, Netherland, Germany), en bevat de - vertaalde - Resource-files. Voor iedere taal die extra ondersteund wordt hoeft dus alleen zo'n directory toegevoegd te worden.
Volgens Acorn (BBC Acorn User Show '92) moeten deze taal-directories direkt in de applicatie-directory staan en niet in een aparte Resources-directory. Dit vinden wij wat onoverzichtelijk. Helaas heeft Acorn deze richtlijn niet bekendgemaakt, en evenmin in eigen toepassingen gerealiseerd. ResFind werkt daarom ook als een Resources-directory ontbreekt; het verwacht dan dat de taal-directories direkt in de applicatie-directory staan.
Een gebruiker die helemaal niets van ResFind weet krijgt nu, voorzover mogelijk, de taal die in de computer geconfigureerd is. Is deze taal niet voorhanden, dan wordt UK gekozen (dat betekent dus dat tenminste UK aanwezig moet zijn, zodat het programma in alle gevallen blijft werken). Een gebruiker die bekend is met ResFind (de programma-documentatie moet hiervoor zorgen), heeft nog een paar andere mogelijkheden: zij kan de variabelen 'ResFind$LanguagesPref' en 'ResFind$LanguagesSuff' definiëren, wat het beste in de !Boot-file van de computer kan. In de eerste variabele staan de talen, die de voorkeur hebben boven de taal die in de configuratie staan, in de tweede staan de talen die ze liever heeft dan UK.
Laten we als voorbeeld een Noorse gebruiker nemen (omdat daar zoveel goede software vandaan komt), die haar computer op 'Norway' geconfigureerd heeft. Nu is deze taal in de rest van Europa niet erg bekend, zodat een programma uit een ander land doorgaans geen passende vertaling zal bevatten. Onze gebruiker heeft echter een talenknobbel, en spreekt ook zeer goed Duits en Frans, terwijl ze Engels alleen in noodgevallen gebruikt. Ze heeft dus het liefste, in plaats van een Engelse versie, een Duitse of Franse, indien voorhanden (en bij onze programma's is altijd een Duitse versie aanwezig). In haar !Boot-file zet ze daarom een regel 'Set ResFind$LanguagesSuff Germany,France'. (Hierbij is ze niet beperkt tot talen die ook in de computer te configureren zijn, maar kan ook 'Jokie' als taal noemen.) ResFind zoekt nu, na de geconfigureerde taal (Norway), naar Germany, dan France, en uiteindelijk (als zgn. default) UK, en neemt de eerste taal die aanwezig is. (De geconfigureerde taal wordt als eerste geprobeerd, omdat ResFind$LanguagesPref niet gedefinieerd is.)
Nu kan het zijn dat een programmeur zijn met een bepaald gevoel voor humor, die ook een 'vertaling' in komische tekst aanbiedt (the RISC Squad heeft met !FormEd zoiets gedaan). Of dat in een bepaald programma de vertaling in de voorkeurs-taal zo slecht gelukt is, dat de gebruiker liever een andere taal wil, die (in het voorbeeld hierboven) normaal niet gekozen wordt. In dit geval kan een variabele gedefinieerd worden, die deze taal voorschrijft. (Dit kan in de !Boot-file van de computer of in de !Run-file van de applicatie; het eerste is aan te bevelen, omdat het vaak niet toegestaan is iets in een programma te veranderen, en omdat de keuze dan voor nieuwe versies van het programma ook geldt.) Die variabele is <ProgName>$Language, waarbij voor <ProgName> de naam van de applicatie moet worden ingevuld. Voor een applicatie is dan 'Set ModulInfo$Language Jokie' een mogelijkheid. Om weer onze Noorse gebruiker te nemen: ze krijgt zo voor !ModulInfo de taal 'Jokie', voor alle andere programma's blijft de eerder genoemde volgorde bestaan.
Om de informatie nog even samen te vatten: ResFind bouwt een string op die er als volgt uitziet:
Voor onze Noorse gebruiker zou dat voor !ModulInfo
Jokie,Norway,Germany,France,UK
zijn, en voor alle andere programma's
Norway,Germany,France,UK
Wat moet de programmeur doen?
==============================
Om te beginnen zet ResFind eerst de gebruikelijke variabele <ProgName$Dir> op de waarde <Obey$Dir>. Daarbij is <ProgName> de naam van de applicatie (zonder het uitroepteken), welke ResFind uit de waarde van <Obey$Dir> haalt. Als alternatief kan de naam aan ResFind als parameter meegegeven worden, wat nodig kan zijn als de naam bijzondere tekens bevat (bijv. !Spark'em).
Als resultaat van zijn zoektocht maakt ResFind een variabele met de naam <ProgName>Res$Path aan. Deze padnaam bevat het pad naar de gevonden taal-directory en het pad naar de applicatie, dus
Is er geen Resources-directory aanwezig, dan is het pad
<ProgName$Dir>.<gevonden taal>.,<ProgName$Dir>.
en werd er geen passende taal gevonden, dan is het pad enkel
<ProgName$Dir>.
Hierna kunnen met de pad-aanduiding 'ProgNameRes:' de Resources in de door de gebruiker gewenste taal aangesproken worden. Niet-taalafhankelijke Resources worden via het tweede deel van het pad bereikt.
Een paar voorbeelden in BASIC kunnen dit verduidelijken:
Inlezen van Templates:
SYS "Wimp_OpenTemplate",,"ProgNameRes:Templates" : REM open templates file
SYS "Wimp_LoadTemplate",.... : REM load template definition
[... load how much you need ...]
SYS "Wimp_CloseTemplate" : REM close templates file
Onze GAG-BASIC-Libraries gebruiken deze syntax (om precies te zijn vereisen ze dat er een padvariabele gezet is), zodat het gebruik van ResFind optimaal ondersteund wordt.
Voor de programma-ontwikkeling is hetniet nodig de eerder genoemde directory-struktuur op te bouwen. In plaats daarvan kunnen alle Resources direkt in de applicatie-directory staan (die immmers ook in het pad aanwezig is), wat het bijhouden van files tijdens de ontwikkeling gemakkelijker maakt. Voordat het programma vrijgegeven wordt moet dan de Resources-directory met alle taal-directories aangemaakt worden. Voor het testen van de verschillende vertalingen is het het eenvoudigste om de computer korte tijd d.m.v. 'COUNTRY UK' (resp. andere landen) om te schakelen. Wordt daarna de applicatie gestart, dan stelt Resfind het te testen land in. Omschakelen na de start van het programma heeft natuurlijk geen effect.
Om de gebruiker in staat te stellen de applicatie volgens wens in te stellen, dient in de programma-documentatie een vermelding van ResFind te staan, die aangeeft hoe de gebruiker m.b.v. de eerder genoemde variabelen en de configuratie van de computer de gewenste taal verkrijgt. Bij normale configuratie moet echter verzekerd zijn dat de gebruiker zonder verdere ingrepen een passende taal krijgt.
Natuurlijk moet ResFind ergens aangeroepen worden om de padvariabele in te kunnen stellen. Om ook op recente wijzigingen te reageren is de !Run-file hiervoor de geschikte plaats. Om te voorkomen dat ResFind onnodig vaak op de harde schijf voorkomt, moet de !Run-file zo geschreven worden dat ResFind zowel in de Resources-directory als in de Library-directory van het systeem wordt gezocht. Dus ongeveer zo:
Set Dummy$Path <Run$Path>,<Obey$Dir>.Resources.
Run Dummy:ResFind ProgName
Unset Dummy$Path
Er wordt eerst een nieuwe padvariabele (Dummy$Path) gemaakt. Daarna word ResFind in het RunPath van het systeem gezocht, en dan in de eigen Resources-directory. Resfind wordt met de programmanaam als parameter gestart, en tenslotte wordt de padvariabele weer gewist.
Een volledige !Run-file (hier van !ModulInfo) ziet er dan zo uit:
RMEnsure InterfaceManager 2.00 Error 0 ModulInfo needs at least InterfaceManager 2.00
WimpSlot -min 64k -max 64k
Run <ModulInfo$Dir>.!RunImage
De !Help-file moet dan een Obey-file zijn, die op soortgelijke wijze de !Help in de passende taal opstart. Dus ongeveer zo:
Set Dummy$Path <Run$Path>,<Obey$Dir>.Resources
Run Dummy:ResFind ModulInfo
Unset Dummy$Path
Filer_Run ProgNameRes:Help
Filer_Run is helaas pas beschikbaar vanaf RISC OS 3.
De eigenlijk Help-file mag niet !Help heten, omdat anders problemen ontstaan als er geen passende taal beschikbaar is. In dat geval zet ResFind immers de applicatie-directory in de padvariabele, waardoor opnieuw !Help opgestart wordt --> oneindige loop!
Disclaimer:
===========
De auteurs zijn op gene wijze aansprakelijjk voor schade, van welke aard ook, die is ontstaan door gebruik of niet-gebruik van ResFind.
Gebruikers-documentatie
=======================
(Basis voor de programma-documentatie - vervang <ProgName> door de naam van de applicatie, zonder de ! )
!<ProgName> past zich automatisch aan aan de taal waarin de computer is geconfigureerd, mits de meldingen (Messages) enz. in deze taal aanwezig zijn. Daarvoor bevindt zich in de applicatie-directory een directory Resources, waarin voor iedere taal een directory met de naam van de taal. Is de door u gewenste taal niet voorhanden, dan kunt u de inhoud van een andere directory kopiëren, en de inhoud vertalen. Bij het starten van het programma wordt een utility ResFind aangeroepen, die de geconfigureerde taal uitleest en kijkt of de betreffende taal-directory te vinden is. Zoniet dan gebruikt het programma Engels (UK). Met een paar variabelen kan de gebruikte taal aan uw wensen aangepast worden. Daarmee kan bijv. ervoor gezorgd worden, dat een programma altijd in een bepaalde taal werkt (bijv. als de vertaling in uw taal niet zo goed gelukt is). Verder is het mogelijk talen aan te geven, waarnaar gezocht wordt voordat Engels aan de beurt komt. De controle verloopt met drie systeem-variabelen, die het beste in de !Boot-file van uw computer aangemaakt kunnen worden:
<ProgName>$Language, ResFind$LanguagesPref en ResFind$Languages$Suff.
Bij aanroep van de applicatie zoekt ResFind naar de eerste taal die ondersteund wordt, en wel in deze volgorde:
1. De inhoud van de variabele <ProgName>$Language
2. De inhoud van de variabele ResFind$LanguagesPref
3. De in uw computer geconfigureerde taal
4. De inhoud van de variabele ResFind$LanguagesSuff
5. UK
Laten we als voorbeeld een Noorse gebruiker nemen (omdat daar zoveel goede software vandaan komt), die haar computer op 'Norway' geconfigureerd heeft. Nu is deze taal in de rest van Europa niet erg bekend, zodat een programma uit een ander land doorgaans geen passende vertaling zal bevatten. Onze gebruiker heeft echter een talenknobbel, en spreekt ook zeer goed Duits en Frans, terwijl ze Engels alleen in noodgevallen gebruikt. Ze heeft dus het liefste, in plaats van een Engelse versie, een Duitse of Franse, indien voorhanden. In haar !Boot-file zet ze daarom een regel
*Set ResFind$LanguagesSuff Germany,France
Wordt nu een applicatie gestart die ResFind gebruikt (zoals <ProgName>), dan gebruikt het programma de eerste taal uit de rij 'Norway,Germany,France,UK' die ondersteund wordt.
Heeft de gebruiker bijv. een applicatie !Otto, die de taal 'Geinig' met grappig bedoelde meldingen aanbiedt, dan is het voldoende om een regel
*Set Otto$Language Geinig
in de !Boot-file op te nemen, om ervoor te zorgen dat !Otto humoristisch loopt, onverschillig wat er in de andere variabelen staat.
--------------------------- End of file -------------------------------