[pmwiki-users] Nested IFs / setting variables with directives

Patrick R. Michaud pmichaud at pobox.com
Sat Sep 30 10:29:04 CDT 2006


On Sat, Sep 30, 2006 at 04:56:12PM +0200, Mike wrote:
> 
> Could you give me a hint about how to combine the Multi Language recipe
> with phrase translations? I.e., how does the phrase translation
> mechanism know which language is currently selected by Multi Language's
> "userlang" parameter?

Hmmm, this is the first time I've really looked at MultiLanguage
in detail, so I need to look at it a bit further.  But on first
reading it looks like the simplest approach might be to
simply use the userlang parameter to select the translation
pages to be loaded:

    switch (@$_COOKIE['userlang']) {
      case 'de': XLPage('de', 'PmWikiDe.XLPage');
                 XLPage('de', 'Site.XLPageDe');
                 break;
      case 'fr': XLPage('fr', 'PmWikiFr.XLPage');
                 XLPage('fr', 'Site.XLPageFr');
                 break;
      case 'it': XLPage('it', 'PmWikiIt.XLPage');
                 XLPage('it', 'Site.XLPageIt');
                 break;
    }

This loads in the standard translations as well as as any custom
translations from a Site.XLPage* page.

However, in thinking about the recipe a bit more I think I would
advocate a different approach to this problem.  Instead of trying
to do so much using the (:if:) markup, I think I would recommend
that we create a custom (:lang:) markup that handles the language
specific translations, including the "else" clase.  For example:

    (:lang de:)
    Text that is displayed when the language is german
    (:lang fr:)
    Text that is displayed when the language is french
    (:lang default:)
    Text that is displayed when the language is neither french nor german
    (:lang:)

This handles the "if-elseif-else" semantics that are desired,
but also it allows "nesting" of (:lang:) and (:if:):

    (:if ! name Index:)
    (:lang de:)German
    (:lang fr:)French
    (:lang it:)Italian
    (:lang default:)English
    (:lang:)
    (:if:)

If we wanted to be a bit more general, we could have a "switch"
statement of sorts

    (:switch {$UserLang}:)
    (:case de:)German
    (:case fr:)French
    (:case it:)Italian
    (:case *:)English
    (:switchend:)

but MultiLanguage is an area where I think having the custom (:lang:)
markup might make more sense to authors than something like 
(:switch:)/(:case:).

Anyway, I'll have to think on the multilanguage issue a bit more.

Pm




More information about the pmwiki-users mailing list