Report Missing Localization Strings Here

ToddTodd Chief Product Officer Vanilla Staff
edited June 2012 in Localization
Hi all. I'm trying to get the translations of Vanilla up to date. Part of that change has been putting the translations into [transifex]( (See the discussion about that [here](

The other part of that is making sure that the text that needs to be translated is up to date. I spent a good couple of days trying to get all of the text out of the current application and into a database. This is a fairly complex task and I most certainly missed some text and probably added some text that no longer needs to be translated.

If you see any text that needs to be translated still then report it in this discussion.


  • SheilaSheila ✭✭

    Hi again!

    Should I report bugs/problems in this topic? There are for example bunch of strings like Activity.DiscussionComment.FullHeadline that seem to miss also from the original translation and result is that %8$ is untranslatable at the moment.

  • ToddTodd Chief Product Officer Vanilla Staff

    Hi @Sheila, I've moved your question to a new thread here. Thanks again for your help and feedback.

  • SheilaSheila ✭✭

    You're welcome! I don't know whats wrong with me since I love doing localizations.. ;)

    Here's a first list for the Core:

    Activity.AboutUpdate.FullHeadline<br /> Activity.AboutUpdate.ProfileHeadline<br /> Activity.ActivityComment.FullHeadline<br /> Activity.AddedToConversation.FullHeadline<br /> Activity.AddedToConversation.ProfileHeadline<br /> Activity.ActivityComment.ProfileHeadline<br /> Activity.AnswerAccepted.ProfileHeadline<br /> Activity.Default.FullHeadline<br /> Activity.Default.ProfileHeadline<br /> Activity.DiscussionComment.FullHeadline<br /> Activity.DiscussionComment.ProfileHeadline<br /> Activity.DiscussionMention.FullHeadline<br /> Activity.DiscussionMention.ProfileHeadline<br /> Activity.Import.FullHeadline<br /> Activity.Import.ProfileHeadline<br /> Activity.JoinApproved.ProfileHeadline<br /> Activity.JoinCreated.FullHeadline<br /> Activity.JoinCreated.ProfileHeadline<br /> Activity.JoinInvite.FullHeadline<br /> Activity.JoinInvite.ProfileHeadline<br /> Activity.NewDiscussion.FullHeadline<br /> Activity.NewDiscussion.ProfileHeadline<br /> Activity.NewRoles<br /> Activity.RoleChange.FullHeadline<br /> Activity.RoleChange.ProfileHeadline<br /> Activity.SignIn.FullHeadline<br /> Activity.SignIn.ProfileHeadline<br /> Activity.WallComment.FullHeadline<br /> Activity.WallComment.ProfileHeadline<br /> EmbeddedNoBodyFormat.<br /> GenderSuffix.First.f<br /> GenderSuffix.First.m<br /> GenderSuffix.Third.f<br /> GenderSuffix.Third.m<br /> markallviewed<br /> Permission.Category

    With these I'm not sure:

    {ActivityUserID,You} earned the <a href="{Url,html}">{Data.Name,text}</a> badge.<br /> {RegardingUserID,You} banned {ActivityUserID,you}.<br /> {ActivityUserID,user} commented on <a href="{Url,html}">{Data.Name,text}</a><br /> {ActivityUserID,user} <a href="{Url,html}">{Data.Name,text}</a><br /> {ActivityUserID,user} mentioned you in <a href="{Url,html}">{Data.Name,text}</a><br /> {ActivityUserID,You} joined.<br /> {RegardingUserID,You} changed the profile picture for {ActivityUserID,user}.<br /> {RegardingUserID,You} unbanned {ActivityUserID,you}.<br /> {ActivityUserID,You} warned {RegardingUserID,you}.<br /> $%7.2f<br /> &lt; a href="{SignInUrl,html}"{Popup}>Sign In</a> or &lt; a href="{RegisterUrl,html}">Register&lt; /a> to comment.<br /> {InsertUserID,User} warned {WarnUserID,User} for {Points,plural,%s points}.<br /> {InsertUserID,User} warned {WarnUserID,User} for {Points,plural,%s points} (just a notice).<br /> Hello {User.Name}!⏎<br /> You have successfully registered for an account at {Title}. Here is your information:⏎ ⏎ Username: {User.Name}⏎ Email: {User.Email}⏎ ⏎ You can access the site at {/,exurl,domain}.<br /> You are about to ban {User.UserID,user}.<br /> You are about to unban {User.UserID,user}.<br /> {InsertUserID,user} added {NotifyUserID,you} to a &lt; a href="{Url,htmlencode}">conversation&lt; /a>.

  • ToddTodd Chief Product Officer Vanilla Staff

    Ah, the first group are things you've probably either already translated in another form, or don't need to translate because they don't apply to your language (like gender suffixes).

    The second group is for the newer version of Vanilla in development. When you see curly braces in a string that means that it puts data from the activity or whatnot in the string. It's easier to use that the %1s style syntax and has some advanced formatting options.

    The user formatting may be the most useful. When you see something like {ActivityUserID,User} that means to display the user.

    • The User means to display the username. You can also do user to display the username in lowercase.
    • You or you will display the word you if the user matches the user that's viewing the page.

    So in the above example you can always just user the user style format if your language needs more advanced formatting for the you style format.

  • SheilaSheila ✭✭

    Todd said:
    Ah, the first group are things you've probably either already translated in another form, or don't need to translate because they don't apply to your language (like gender suffixes).

    The first group has items that seem to mess my current production translation. For example Activity.DiscussionComment.FullHeadline results 'Uusi kommentti seuraamassasi discussionessa, lähettäjänä xxx.' meaning that the phrase for discussion is missing and I'm not able to override that. Basicly thou when thinking of it further, what the current translation might miss, is translation for 'discussion'.

    The second group is for the newer version of Vanilla in development. When you see curly braces in a string that means that it puts data from the activity or whatnot in the string. It's easier to use that the %1s style syntax and has some advanced formatting options.

    Agree. Just superb development, great! :)

  • SheilaSheila ✭✭

    Hi again!

    Could strings like 'Activity.DiscussionComment.FullHeadline' be fixed soon? They can't be even overridden in Transifex atm since when trying to lose a string that gives undefined word, there's error with message 'The number of arguments seems to differ between the source string and the translation.' that prevents saving.

  • I created my forum from scratch with and I was "Welcomed to Vanilla!" instead of to my forum name. I think that line is missing.

  • GunChleocGunChleoc New
    edited December 2013

    I have a problem with some untranslatable strings in core:


    etc. need a placeholder at the least and complete spelling ot in an ideal world.

    For example, my translation for "their" needs to look like this:

    Their X = a /am /an /a' /an t-X aca
    Their Xs = na /na h-X aca

    It depends on the first sound in X if a /am/ an /a' or an t- etc. is used.

    P.S. and I found a typo:

    Notifictions -> Notific**a**tions
  • What about v2.1? Is there any category on Transifex for 2.1beta? I couldn't find!!!

  • emziemzi
    edited March 2014

    Althouth the string Anchor(T('Statistics Documentation') is in both 2.1b2 and, but it's not available on Transifex trunk!

    It's in this file applications/dashboard/views/statistics/index.php and is showed up here: /index.php?p=/dashboard/statistics

    A minor issue: the string clicking here should be included in dash_core file because it is a part of gettingstarted plugin while now it's located in site_core file.

    customize your profile now has the same problem!

  • Guys, I completely translated the dashboard and the site core in italian with all the missed strings from transifex and then ordered alphabetically.
    I'm still updating on every Vanilla update since I'm starting a personal community.

    If you want it, let me know, I spent almost 4 months to catch and translate every single string and I will be glad to share with the community.

  • Not translated strings:
    "Your password must be at least 6 characters long.", "Too Short", "Weak", "Ok", "Good", "Strong" - (;
    "Move" - ( click cogwheel button);
    "edited" - (;
    "the category" - (;
    "Delete Comment" - (;
    "Are you sure you want to delete this comment?" - (;
    "Confirmed email address" - (;
    "Notify me when people comment on discussions I've participated in." - (;
    "Expand for more options." - ( look into source code);

    "Show moderation queue for" - (;
    "Filter" - (;
    "Everything" - (;
    "Email is confirmed" - (;
    "Unconfirmed" - (;
    "Whoops!" - (;
    "Yes, continue" - ( check one and click Restore);
    "No, get me outta here!" - ( check one and click Restore);
    "Internationalization & Localization" - (

  • '...sent you a message" - (email notification template);

  • korelstarkorelstar
    edited January 2016

    Is this collection still desirable? As far as I can see, some strings from the postings before are still missing. Some more examples are:

    Draft.Delete from applications/vanilla/views/drafts/drafts.php
    Your password must be at least %d characters long. from applications/dashboard/views/entry/register*
    Select a category... from library/core/class.form.php

    Please give feedback, if new findings will be processed and added to Transifex.

  • I've written a small script which searches for all calls of T(string) in the code and extracts those string, which are not in Transifex, i.e. which are not known in the localization file:

    $vanilla_dir = '.'; // path to the vanilla directory, default is the current directory
    $locale = 'vf_de'; // use this locale to check if the string exists in transifex
    $dirs = array('applications', 'library', 'themes'); // search in these directories only
    $pcre = <<<'EOT'
    $cmd = 'grep -Prohi '.escapeshellarg($pcre); // you need to have grep installed
    $locale_dir = $vanilla_dir.'/locales/'.$locale.'/';
    exec('cd '.escapeshellarg($vanilla_dir).';'.$cmd.' '.implode(' ', $dirs), $matches);
    foreach($matches as $match) {
            $string = substr($match, 4, -2);
            $c = substr($match, 3, 1);
            $string = str_replace('\\'.$c, $c, $string);
            if(!array_key_exists($string, $Definition)) {
                    echo $string."\n";

    Currently, it produces a list of 282 missing strings for the vanilla code at GitHub. All these strings have to be added to Transifex. Due to the length, I'm not posting them here -- you can run the script on your local site with the current code and localization files from transifex to get the list of missing strings.

    @Todd, could you please add these strings to transifex?

Sign In or Register to comment.