How to get (translatable) strings from specific domain with POEdit
Asked Answered
V

2

5

I have been trying for hours finding a way to setup POEdit so that it can grab the text from specific domain only

My gettext function looks like this:

function ri($id, $parameters = array(), $domain = 'default', $locale = null)

A sample call:

echo ri('Text %xyz%', array('%xyz%'=>100), 'myDomain');

I will need to grab only the text with the domain myDomain to translate, or at least I want POEdit to put these texts into domain specific files. Is there a way to do it?

I found several questions that are similar but the answers don't really tell me what to do (I think I'm such a noob it must be explained in plain English for me to understand):

How to set gettext text domain in Poedit?

How to get list of translatable messages

Vaporous answered 5/10, 2012 at 9:18 Comment(0)
V
10

So I finally figured it out after days of searching, I finally found the answer here:

http://sourceforge.net/mailarchive/message.php?msg_id=27691818

  • xgettext recognizes context in strings, and gives a msgctxt field in the *.pot file, which is recognized by translation software as a context and is shown as such (check image of Pootle showing context below)

    • This can be done in 3 ways:

      1. String in code should be in the format _t('context','string'); and xgettext invocation should be in the form --keyword=_t:1c,2 (this basically explains to xgettext that there are 2 arguments in the keyword function, 1st one is context, 2nd one is string)
      2. String in code in the format _t('string','context'); and xgettext invocation should be in the form --keyword=_t:1,2c
      3. String in the code should be as _t('context|string') and xgettext invocation should be in the form --keyword=_t:1g

So to answer my own question, I added this to the "sources keywords" tab of Poedit:

ri:1,3c

ri is the function name, 1 is the location of the stringid, 3 is the location of the context/domain

Hope this helps someone else, I hate all these cryptic documents

Vaporous answered 13/10, 2012 at 14:46 Comment(7)
Hi, thanks for this, but where do you specify the textdomain? in your case myDomain.Papa
Ahh I got it, now all strings will be extracted with it's text domain per string is included, so we can't generate the .po based on only certain text domain?Papa
Yep, I'm looking for answer for way too long and I dont see where have you wrote domain name in fact?Stelu
Is it still that case that we can't extract translatable text for a specific text domain only?Topmost
But domain and context are two different things.Overdress
No idea why this is the accepted answer. Does not solve the question.Endomorphic
yeah, it confused me too and I got bitchslapped by grumpy Vaclav. As I read Vaclav other answer it is not possible to mix things in one file. However, it does happen. I use Roots Wp Theme which has it's own .po file and I have my own translation file. I don't want to remove all the roots entries so I just want to ignore them. I thought I could do that with the context but I was mistaken. This answer kinda confused me in what was possible or not. Ill do some more reading and see if I can come up with a solution for the original questionPompano
N
0

(This is a repost of my answer to the same thing here.)

Neither GNU gettext tools nor Poedit (which uses them) support this particular misuse of gettext.

In gettext, domain is roughly “a piece of software” — a program, a library, a plugin, a theme. As such, it typically resides in a single directory tree and is alone there — or at the very least, if you have multiple pieces=domains, you have them organized sanely into some subdirectories that you can limit the extraction to.

Mixing and matching domains within a single file as you do is not how gettext was intended to be used, and there’s no reasonable solution to handle it other than using your own helper function, e.g. by wrapping all myDomain texts into __mydomain (which you must define, obviously) and adding that to the list of keywords in Poedit when extracting for myDomain and not adding that to the list of keywords for other domains' files.

Nikianikita answered 10/11, 2015 at 6:50 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.