[RS] writes that " i18n stands for that word with 'i' in front, 'n' at the end, and 18 letters in between - [internationalization], adapting software to non-English language environments." Also, he provides an algorithmlet to produce such abbreviations: ====== proc n2n s { return [string index $s 0][string length [string range $s 1 end-1]][string index $s end] } ====== ======none % n2n internationalization i18n % n2n localization l10n ====== [AMG]: I'd avoid generating the substring only to take its length: ====== proc n2n {s} { return [string index $s 0][expr {[string length $s] - 2}][string index $s end] } ====== <> Local | Human Language