[etoys-dev] Experimenting msgctxt supprort (SQ-139)

Korakurider korakurider at gmail.com
Mon Aug 3 12:39:13 EDT 2009


Hi all.
For http://tracker.squeakland.org/browse/SQ-139 ,
I am playing with prototype of msgctxt support in Etoys and want to
discuss with you about this.

Changesets:
	1) trnCtxCore-KR	msgctxt support for translation engine

	2) transCtxSelector-KR	To use selector name of method that sender of
				#translated and #translatedNoop as msgctxt


	3) transCtxExplicit-KR		
				#translatedWithContext:
				and #translatedNoopWithContext:
				-- variant of #translated and #translatedNoop
				   with manually specified msgctxt

	4) Using #translatedWithCtx: and #translatedNoopWithContext.
		ex1VocaCore-KR
		ex2Voca-KR
		ex3Sound-KR
		ex4Halo-KR
		ex5Parts-KR			

**How to try it:

    1) Build experimental image
	1.1) Grab fresh developer image and update to the latest.
	1.2) Apply changesets 1)-4) to the image
	1.3) Download the latest PO file for you language from
			http://translate.sugarlabs.org/
	1.4) Switch locale to your language.
	1.5) Open LanguageEditor and load the PO of 1.3) with
		"gettext import" functionality.

    2) Generate PO with msgctxt
	Evaluate this:

		GetTextExporter2 new exportTranslator:
			(InternalTranslator newLocaleID: LocaleID current).

	Generated PO is at po/etoys/$(LANG).po under your image.

    3) Save image and exit.

    4) Explore and edit PO
    	4.1) Generated PO is like this:

		#: Morphic-Kernel,_Morph>>additionsToViewerCategoryBasic
		msgctxt "Morph>>additionsToViewerCategoryBasic"
		msgid "y"
		msgstr " (... some translation ...)"

	You could see new statement "msgctxt" with name of selector where
	the string is located.
	If same string has multiple occurrences, each has its msgctxt/msgid
	specification.  and you could supply different translation for each
	occurrences.


	4.2) compile MO
		msgfmt -o etoys.mo yourpofile
	
		and place etoys.mo to
                      locale/$(LANG)/LC_MESSAGES
               under your image.

     5) restart Etoys with the changes, switch to your language,
	and check how translation is executed.


**Manually specifying msgctxt

	For some strings with #translatedNoop, #translated is applied in
	other location and  "selector as msgctxt" doesn't work.
	It is needed to manually specify msgctxt.  "What as msgctxt"
	needs to be negotiated between providers(#translatedNoopWithContext:)
	and consumers(#translatedWithContext:).

        Source code become ugly because there are many occurrences of
such use case.
        But I couldn't think of better idea.

/Korakurider
-------------- next part --------------
A non-text attachment was scrubbed...
Name: proto1.zip
Type: application/zip
Size: 32805 bytes
Desc: not available
Url : http://luna.immuexa.com/pipermail/etoys-dev/attachments/20090804/1a916c2a/proto1-0001.zip


More information about the etoys-dev mailing list