Zephyr's concession to internationalization basically consists of declaring character sets.
Version 3.0 adds two new header fields, the second of which is a 16-bit number (kind of a waste really), that represents the MibEnum? number of a character set. (Go look it up at IANA.ORG). In practice this MUST be either 0 (for Unspecified), 4 for ISO-8859-1 (The defacto standard in most current zephyr usage), or 106 for UTF-8 (the only reasonable thing going forward if the payload is representing text).
zwrite and zaway now have a -x option for specifying the outgoing character set.
zwgc now has a -charset option. At the moment, it merely sticks a variable charset into the zwgc.desc context. That variable should be called notice_charset, and the deduced tty output charset should be in a variable called tty_charset, will of course be overridable by zwgc.desc. Tty output is transliterated from notice_charset to tty_charset. (#5)
zwgc now does an ugly but occasionally functional job of displaying UTF-8 text. (#33)
These conversion points are obviously kludgy, they would be less so if strings in zwgc.desc land could be seamlessly multibyte. (#10) I'm currently thinking that the right approach is to make everything expect UTF-8 and convert all strings to UTF-8 when they enter zwgc.