In this episode, we contrast the old way of translating WordPress plugins with an emerging method that (at least in theory) makes translation faster and easier. But, is that how things actually turned out? Tune in and find out.
Listen
Watch
Transcript
Chris: Welcome to the Accessibility Craft Podcast, where we explore the art of creating accessible websites while trying out interesting craft beverages. This podcast is brought to you by the team at Equalize Digital, a WordPress accessibility company, and the proud creators of the Accessibility Checker plugin, and now onto the show.
Amber: Hey everybody, it’s Amber and I’m here today with Steve.
Chris: Hello everyone.
Amber: And Chris.
Chris: I’m here too. Hi everybody.
Amber: And this is episode number 126. So if you are tuning in and you would like to access show notes or a full transcript, you can find those at AccessibilityCraft.com/126. Now, we always start every episode with a beverage, and Chris is gonna introduce our beverage in a minute. But I’m gonna tell you just as a little throwback, ’cause at the end of our last episode, if you haven’t listened, you should go listen. We tried for the first time ever, a drink that called Mary Jones. That included some what is, what was it? THC.
After my like three or four sips, but about 20 minutes after the episode, oh, I could feel it. I did not like it. So I’m very excited about today’s beverage. Which is more in my comfort zone of not being.
Steve: Yeah, not freaking out. You Amber was freaking out, right?
Amber: I don’t know if I was freaking out, but I had never felt like that. And also we did it in the middle of the day and I had a whole bunch of plans for things I needed to get done in my Friday afternoon.
Steve: Yeah.
Amber: And then I got on a meeting with Steve and Steve’s like, all you said was Uhhuh. Uhhuh. Uhhuh.
Steve: Yeah.
Today’s Beverage
Amber: So what are we drinking today that will not ruin Amber’s Friday afternoon productivity, Chris?
Chris: Well, fun fact “not” is even in the name. It’s Not Beer. And the funny thing is it kind of looks like it could be a beer. I’m guessing that’s intentional, but we got a red, white, and blue can here. Kinda looks like a rocket pop, if you’re familiar with the classic popsicle.
Amber: Bomb Pops. So it’s horizontal stripes with red on the top, white in the middle, and a very light blue on the bottom of the can.
Chris: Yeah. But I like their beverage marketing copy. So I’m just gonna read this.
You love America, but have you ever tasted it? Lucky for you, we canned it. A little sweet, a little citrusy, and a whole lot of America in every red, white, and blue can.
Amber: So we are gearing up for the 4th of July here in the USA and, we are going to be drinking some American, not beer, although I think this episode might come out after the 4th of July, but yeah, still July is when we celebrate our country.
Yeah. So we’re doing it with this, but it’s not beer. What is it?
Chris: It’s a sparkling, unsweetened beverage with some raspberry and citrus flavors. Zero calories, zero sugar, no sweeteners. And they’re, they put a little bit of Himalayan salt in it too to balance out the flavors. So hopefully it’s not salty water. We’ll see. But I’m gonna open mine up here and we can give these a taste.
Steve: Unlike Amber’s last drink, this one says never a bad time.
Amber: Yes. You know what, this made me think about actually, was when we did Liquid Death and I think we did a, an iced tea from Liquid Death, but they started with water. And when I had read the backstory of those is it was created by rock musicians who, they would go to these concerts and they kept being expected to drink something like energy drinks.
And they’re like, I’m so sick of drinking these energy drinks. I just want water. But it wasn’t cool to be drinking water. So they invented Liquid Death so that they could have like “metal” water. And this is what this makes me think of. Because this can, it legit looks like a beer, like the fonts they’ve chosen, the design of the label.
Like it looks like what I think of as like what your dad or your grandpa would drink, but it’s water.
Steve: And it’s in a tall boy.
Amber: How is it? You guys have tasted it? Yeah. How’s it smell?
Steve: It’s, it’s good.
Chris: It’s very cherry forward on the nose. That’s what I’m smelling.
Amber: Ooh.
Steve: But it does have that rocket pop kind of kind of flavor.
Amber: You guys both call them rocket pops? I call them bomb pop.
Steve: What do you, you call ’em bomb pops?
Amber: That’s what I grew up calling them.
Steve: I always called ’em ’em rocket pops.
Amber: Yeah. Bomb pops.
Steve: Maybe it’s a trademark thing. Maybe it’s you know, Kleenex and Windex, right?
Amber: O h yeah. Like one of them is a brand.
Steve: Yeah.
Chris: Yeah. Maybe Amer’s family bought the off brand ones.
Amber: It tastes good. I’m kind of on the fence about cherry things sometimes.
Steve: Well, sometimes, sometimes they’re called firecracker popsicles too. I think it’s, I think it’s a branding thing. There’s bomb and rocket and firecracker.
Chris: Yeah. It’s just, it’s very refreshing. Like the flavoring is not too subtle. It’s also not too much. I feel like they’re just very much walking the middle of the road and it’s not salty.
Steve: Yeah.
Chris: So I was a little worried when they said they put Himalayan pink salt in it, that it would be salty.
Amber: So is cherry what you guys both taste in this?
Chris: It’s more, it’s mostly cherry and like a little lime. It almost makes me think of if you go to Sonic and get like a cherry limeade, it’s just like that without the sugar.
Amber: Yeah. So there’s zero sugar. It’s not, but it also doesn’t have fake sugar. So it is not sweet. It’s sparkling water, but it’s flavored.
Steve: It’s not very, it’s not over overly carbonated either.
Amber: So I, yeah, I think it tastes like it’s got a cherry limeade flavor, which throw back to one of our first episodes ever. We did the Hello Kitty Cherry Limeade pop, and I was like, oh my gosh, this is so sweet. I can’t handle that. I will drink more than three or four sips of this during this episode, so I give it a thumbs up and I will still be productive this afternoon.
Steve: I’ll give it a thumbs up. It’s good. I like it.
Amber: Yeah.
Chris: Same, same. I would get this again.
Amber: Yeah, and I’m thinking like this is nice flavor and stuff without having to worry about any of the other side effects.
Steve: There you go.
Why Consider Translation, How Translation Traditionally Works in WordPress
Amber: All right, so I wanted to talk about how to translate your WordPress plugin today. Because we recently released, and by we, I don’t mean me, I mean Steve and William on our dev team released a version of Accessibility Checker and all of our add-ons for Accessibility Checker translated into a bunch of different languages.
So should we talk about that?
Steve: Yeah. But maybe first we should talk about what inspired us to translate Accessibility Checker and its family of add-ons into multiple languages. Chris, you care to weigh in on that?
Chris: Yeah. I’ll first talk about it from like the just general, like we’re trying to grow a product angle and then I’ll speak to like generally why it’s important. But from the growth angle, I have observed over the last maybe five or six months that increasingly we’ve seen adoption in Germany, Lithuania, Spain, Austria, Italy, quite a few different EU countries. And I noticed, and Amber noticed, and probably Steve noticed as well, just ’cause we have a activity fee where we can see opt-ins that Germany was kind of leading the pack in a lot of opt-ins.
And that was one where someone, a very gracious and generous volunteer, had actually translated a bunch of the strings in the free version into German. And we were seeing a lot of growth there and just growth in Europe in general. So it seemed to just make sense, like if there was a way for us to get Accessibility Checker into more languages, that with the EU accessibility Act and everything happening over in Europe, it just made a lot of sense for business reasons.
But, beyond business reasons, accessibility is I think we can all agree a universal issue regardless of what language your website is in. And anyone who’s managing a WordPress website should have tools that they can use and understand that, give them accessibility feedback and give them advice on what they can do to find and fix issues.
And I think that being able to have Accessibility Checker available in more than just English and maybe partially translated in a couple other languages, and actually having it in 30 plus different languages is a huge step forward for accessibility on the WordPress platform and giving people tools that they can use because translation in WordPress is hard, which I think we’ll get into more.
But Amber, speaking of translation being hard, how was Accessibility Checker originally being translated? Do you wanna take people through what the translation process is kind of like by default?
Amber: Yeah. With the process in the WordPress project, the way it works is it’s volunteer driven, so any plugin or theme that is available for free on WordPress.org can put certain functions or wrappers, which I’m sure Steve can tell us more about from a technical perspective in a minute around strings. So words or phrases or sentences or paragraphs, whatever, like text that is in the code of their plugin, and that basically opens it up as saying, hey, this is translatable.
And then we can throw a link to this where you can look at it and learn more about the process. But volunteers can then go and use a tool on WordPress.org where they see the English string or whatever string the native language is. And then they can choose from one of, I don’t know, 50 or 60 different languages.
And they even have variations like they have Spanish from Spain and they have Spanish from the Dominican Republic and Argentinian Spanish and so they have a lot of different variations for dialects. So you could choose that. And basically it’s a web form almost where on the left is the thing you’re translating. And then someone who is a native speaker of that language, or a fluent enough speaker of that language can then provide the alternative and then it gets submitted.
And then there are people on the translation team who are approvers and they can go basically see the translations that existed and approve them, and then they go live and then they’re available for your plugin. Which is a really great cool thing that we have communities of volunteers and people who are doing this for free. And maybe before…
Steve: There’s a little caveat on that too. I think you have to get to a certain percentage of translated strings before it actually will generate the language file on your dot org plugin page, so…
Amber: Oh, yeah. So it, they won’t release the German version if you only have 2% of your plugin in German.
Steve: I think it’s, I think it’s 90%. I mean, don’t quote me on that, but it’s around there. It’s a pretty high number. And then once you reach that threshold it, you will then see you know, on the sidebar where it says translated in so many languages and you can click on it and see those, but…
Amber: Yeah. What did, so on that getting set up and like the technical part, what did you have to do in the plugin initially to set it up for translation by WordPress community, Steve?
Steve: Yeah I mean, it’s not too difficult on that end if you’re doing it through Glot Press. But you basically need to use a text domain inside your plugin. You define that in the plugin definition and then you use that text domain throughout the plugin.
In the translation functions, there’s just little wrapper functions that you can use that could either be just a regular wrapper or an escaping wrapper, and then you put your string in there and then you put your your text domain in there.
Amber: So I have no idea what you’re talking about. What’s a text domain? What’s the text domain for Accessibility Checker?
Steve: It’s accessibility-checker.
Amber: Oh, okay. So it’s just like a slug.
Steve: It’s a slug.
Amber: Okay. So it’s like the slug for the plugin that you referenced?
Steve: So through this process that we went through the last couple weeks our text domain actually was EDAC, that’s E-D-A-C. Which is Equalized Digital Accessibility Checker. We used to use that as like a prefix. And we actually were trying to standardize our text domains across all of our plugins, so we actually are switching those out to use the actual slug. We actually did switch ’em out to use the slug, so it is now accessibility-checker.
It’s just a string. It’s just a slug that you’re going to use throughout the plugin, inside of these translation functions, these little wrapper functions. You know, it’s like double underscore open parentheses, put your string, comma, your text domain, close parentheses. So what that does is that basically says:
This is a string. And it is ready to be translated. And it does have a function through which the strings can be replaced with the correct language.
So we had to do that. And you kind of have to audit your plugin a little bit to make sure that no strings that need to be translated were missed. You know, through the years we’ve actually gone through and made sure with every pull request that our strings are all translated. If there are any that we missed, we go back and clean those up. And then from there you have to create a, a pot file and what a pot file is basically, it looks, it’s essentially like a spreadsheet, like what Amber was describing on Glot Press, which you can see on the webpage.
It’s essentially that, but it’s a file that has all your strings. All your translatable strings, if you don’t wrap your strings in these translation functions, they won’t be generated through the pot file. And the way you gen generate a pot file is the easiest way to do it is to just use the WP CLI.
There are CLI commands that you can run that we’ll generate that pot file for you. So you you upload your pot file to Glock Press or in your plugin and and then they’re all there. And like then, like Amber said, then you gotta find contributors to help you translate those strings.
And sometimes that’s a quite a bit of a challenge. We were lucky enough to have some help there in the free plugin before we went through this process. But yeah, it’s kind of the simple breakdown.
Chris: Yeah so as Steve alluded to, there isn’t necessarily just an army of free translators raring to go with every plugin that enables this capability. So what were some of the bigger challenges we encountered with just relying purely on the WordPress core translation process?
Amber: Yeah, I mean, the biggest one, like Steve said, is volunteers. People have to be willing to do that, even if they’re not paid. So it’s do they want to, are they interested in, I think with Accessibility Checker, it is a very large plugin.
We have a lot of language in the admin, you know, whether on different pages, like different phrases here and there sometimes paragraphs or lists explaining to you how to do something. And so I think at our peak the best was German and it was mostly because, we’ll shout out to Robert Windish, who is an amazing human being.
But he got, he lives in Germany. He got a bunch of people on the translation team and German translation volunteers to translate our plugin into German. And I think at one point we had 97% coverage in Germany, which was great. But then, you know, as we’re releasing updates now, there’s new strings that also have to be translated.
So it’s almost like somebody would have to monitor that and be like, oh, I need to go translate these now. Because I think we went down to like 72, 74 percent coverage just ’cause we were updating the plugin.
We had some in French and some in Dutch, I think, but not enough. Whereas like our very small plugin accessibility, new window warnings. That one has, I don’t know, 10 strings or something. It’s really easy. So that’s been translated into a ton of different languages. And the strings don’t really change in that one as frequently ’cause it’s so concrete.
It doesn’t need all these updates. We’re not adding massive features to it. So there’s the challenge of just getting people in the first place and then getting people to monitor it and continue to wanna volunteer for it. But then there’s also a challenge of, someone has to approve it. So it’s not just someone volunteering their time to translate, it’s also someone volunteering their time to approve.
So one of the frustrations I had was that Paola on our team, who is our content specialist, is a native Spanish speaker. She put hours into translating into Spanish. And if you were to go look more than a year later, those strings are still pending approval. So even though we are like, oh, we have someone that we can pay and her salary and her work to translate the plugin, there’s no guarantee that it would ever be released because we have no control over that.
And I even went into the translation channel and WordPress Slack, and, I said, hey, these are here. Can anyone review them? And they’re like, there’s no one for that language right now. I was like, okay. It’s just a very frustrating process, I think and that can be challenging if you’re a plugin developer and you’re trying to figure out how can I make this more accessible?
I don’t know if you have any other thoughts on the challenge side of it, Steve.
Steve: No, I mean, I think you, you hit the nail on the head. I mean, that’s definitely the challenge. I mean, I think the people with the level of permissions to approve, I think it’s pretty small team these days, and it’s been reduced even in the last year or so.
So there’s just not a lot of people with you know, commit permissions that can spend a lot of time when you’re talking hundreds of strings, right? And they gotta speak that language, right? So this is definitely the challenge.
Amber: Yeah. So of course we figured out a way to get our plugin translated, and we’re gonna talk about that, but we’re gonna take a short commercial break first.
Brought to you by Accessibility Checker
Steve: This episode of Accessibility Craft is sponsored by Equalize Digital Accessibility Checker, the WordPress plugin that helps you find accessibility problems before you hit publish.
Thousands of businesses, nonprofits, universities, and government agencies around the world trust Accessibility Checker to help their teams find, fix, and prevent accessibility problems on an ongoing basis.
New to accessibility? Equalize Digital Accessibility Checker is here to teach you every step of the way. Whether you’re a content creator or a developer, our detailed documentation guides you through fixing accessibility issues.
Never lose track of accessibility again with real time scans each time you save, powerful reports inside the WordPress dashboard, and a front end view to help you track down hard to find issues.
Scan unlimited posts and pages with Accessibility Checker Free. Upgrade to Accessibility Checker Pro to scan your website in bulk, whether it has 10 pages or 10,000. Download Accessibility Checker today at EqualizeDigital.com/Accessibility-Checker. Use coupon code AccessibilityCraft to save 10% on any plan.
A Better Way Forward for Translating WordPress Plugins, Maybe?
Amber: All right, so we are back. We’ve talked a bunch about the difficulties and the challenges and we wanted to get it translated and we couldn’t. I went to Press Conf, which is a conference earlier in the year that is more of a business focused conference for WordPress folks. And I had a really great conversation with Ben Ritner from Kadence WP.
And he told me about something called Private Translation Cloud from WPML that they had been experimenting with at Kadence and their parent company, Stellar WP. So I came back from the conference and I shared that with our team and we decided to test it out.
Chris, would I put you on the spot too much to ask you to give a quick overview of what PTC is?
Chris: Yeah. I can give a very basic description of what it is. At its most basic, Private Translation Cloud or PTC is a combination of AI and a proprietary language model that enables translation of these strings into, I believe, 33 different languages.
And there’s a whole bunch of them here. Most of them appear to be like, European or I do see like Japanese, Korean. There’s a lot too many for me to all to read out, but there’s it seems like it’s a very robust and as we’ve seen a pretty robust piece of software. So it’s basically supposed to automate translation and they claim, or their tagline that we saw used quite frequently is “better than human” translation is what they say.
Amber: So I don’t know if I believe that, and I don’t know that I would promise that, but I mean, it certainly is. How could talk about this in a minute?
Steve: How could you validate that though? If it’s better than human, how can we validate if it actually is better than human? As a human.
Amber: We wouldn’t, because a human would look at it and be like, this looks good.
Steve: That’s right.
Amber: I don’t know.
Steve: Yeah.
Amber: How does that work technically, Steve?
Steve: Yeah, so this kind of was an interesting one and that Amber kind of put a bug in my ear about. And, I kind of looked at it and then it sat for a little while and then I got another bug in my ear about it from Chris.
Amber: Well, I’ll tell you and I think most teams are this way too, when you have certain like marketing deadlines for different things. And we went to Word Camp Europe, which we’ve talked about on the podcast. Everybody knows that.
And for me on the marketing side, I’m like, this is a deadline. There are things that I would love to see happen before Word Camp Europe because it makes sense. And it might help me while I’m there, you know, or Black Friday is one that people have a lot as a plugin developer.
Steve: Yeah. She wanted some marketing juice. Yeah, which I get it. You know, and to that too, like when it comes up about translations, and this is maybe just a little sidebar though, like when you’re like you know, you’re the CTO or like a product owner of a piece of software, right?
A lot of times you’re playing a juggling game, right? Because there’s only so many resources. There’s only so many hours in a day and there’s a million features that you want and everything’s fighting for priority, right? And it, and you try to like, we wanna do that, right? We want to do these translations, but we’ve got these features.
And these features may. You know, help with profitability you know, do translations help with profitability, maybe, but maybe, you know, so you’re always playing this game and it’s definitely things can kind of get put on the back burner for a little while.
And what we looked at PTC. This translation software a little bit to see Hey, can we implement this, you know, fairly quickly. And I will say that it started out as maybe a two or three day thing that kind of ballooned into about three weeks.
Amber: You’re saying that, once you dive into stuff, it’s never as simple as…
Steve: Well, and two it depends on the complexity of your product. You know, Accessibility Checker is five plugins now. And it depends on the complexity of your workflows in your continuous integration and things like that. And at Equalize Digital, we want to do it right and we wanna do it the right way where that marketing juice is great. But it a, it in the backside it needs to actually do these things.
It can’t just be like, we we translated some things and we’re not sure if they really, the, they really work. So this is an AI tool that translates, we didn’t just okay, we just translated with AI. There you go.
Amber’s in Europe. I’m in, in the United States and, we’re working, Hey, we got this, we send it over to Amber. Hey, check it out. You know, and kind of the, you know, like we’re going to bed and she’s waking up and she’s having people read these strings and
Amber: I do think that was the benefit of doing it right before Word Camp Europe. So our friend Taco, who’s from the Netherlands and already has a Dutch website, he looked at all the Dutch for us. I had a friend from Italy look at it, right? Like a bunch of different people looked at some different languages, which was helpful. And. I do think that was helpful timing wise to be there because it’s a bigger ask to email someone and be like, take some time out of your workday than oh, hey, we’re all standing around at a Word Camp chatting.
Would you take five minutes to read this? You know?
Steve: So jumping a little bit into the technical side, so PTC as like an overview, it’s basically what you do is you connect your GitHub repository to it. And you have to have, of course, you have to have a pot file generated by WP CLI on your own, and then it grabs that pot file and it generates a machine file and the dot po, which is the actual human readable translation file.
And of all those strings, and it’ll do it in all the languages that you select. You can choose which languages you want. You can choose which branch of your git repo it monitors. And it would just do this automatically. And it goes really quick at first. It has features inside of there where you can actually just like on Glot Press, like you kind of get this like excel looking view with the columns.
You know, like this is the what’s in the pot file, which is an English string, right? And then, this is your translation and you can actually go through and edit those. So if somebody comes to us and says, you know, this translation in German is kind of weird, we can, we’d be like, well, what is it actually?
And we can go into the PTC dashboard and we can edit it there and it’ll always use that even over an AI generated string. So it’s not…
Amber: Well that’s good to know. I didn’t know that. And that was a question I was gonna ask you later, which is, if people report problems, can we fix them and force the AI to use our correction and so we can?
Steve: Yeah, totally. So it’ll always, like if you edit. One of the strings, it’ll take yours by priority the next time it auto generates. So there’s also a glossary in here, which is really nice for keywords like Accessibility Checker that we don’t want translated. So in, in the process of going back and making sure all the strings in our plugin are translatable, we maybe were a little overzealous and we translated even our own product names.
So in here you can add words like in the glossary we added Accessibility Checker, and then in all the languages, they’re just English. And then we added Equalize Digital, and all the languages they’re English.
Even if there was another language where like maybe Accessibility Checker really doesn’t make sense, like even as a product name, we actually can modify that on a language by language basis in the glossary. And what this does is I don’t have to go back into the plugin or William doesn’t have to go back into the plugin and remove the translation function wrappers.
It will just automatically not translate those, or actually it does translate ’em, but just into what we told ’em to and we told ’em not to translate ’em to different languages. So in a nutshell, that’s kind of how this system works. It’s actually pretty straightforward. It’s pretty simple.
I mean, not to show bias to this PTC WPML.org I did actually just this morning, saw that Gravity Kit came out with one called PhotoMatic. I haven’t tried it, but I’m just gonna mention it here. If you’re looking into these kind of AI translations to give it a look. And PhotoMatic looks like it’s more of a CLI thing that you could run within your terminal. But I’ll just give a shout out to that.
Amber: Yeah, so there’s multiple options and ours, so you were saying we set it up to monitor, I don’t know, like our dev branch. And it goes out and then it submits a PR back to the dev branch in GitHub?
Steve: Yep.
Amber: So pull request for non-developers. And then you guys can review and approve that. It doesn’t just automatically edit your code, which I think is nice.
Steve: Yep. It’s your friendly little AI translation developer that will just sit there and wait till you put in a pot file with a new string that, and it will translate.
So we had 32 languages. So like you’re talking, it goes at, you put it in and you’re getting a pull request with 64 files in it, right? Every time. And and it actually submits each language file as a commit. So if you’re a developer chasing stats on GitHub and like it’s your account attached to PTC, your commit numbers are gonna go through the roof.
Amber: So you’re telling us that your stats are all fake now?
Steve: Yeah. Yeah. It looks like you’re doing a lot.
Translating Accessibility Checker: Our Implementation and Costs
Chris: Well, I was gonna say, I bet the number one thing that any like developer or person with the product is gonna be thinking immediately is what did all this cost? I mean, they could know the website, look at the pricing, but I’m wondering in practical sense, like not just, dollars for the platform, but also like general time. If you have a thought of like how much time it took, I would be interested to hear that too.
Amber: But it’d be good just to talk about the pricing for people so they don’t have to go find out themselves.
Steve: Sure. So far our cost with the PTC WPML.org is zero because we are on a free trial for 30 days, and…
Amber: I think it’s a really generous, free trial.
Steve: It’s a really generous, free trial. Yeah, so what I’ll say about that a little bit too is actually I think that the free trial, and it doesn’t seem to be super limited, we did five plugins.
Thousands of strings, and what I will say is. And we’re getting a little bit of how technical this was to set up, but from our own workflow side is we needed kind of, we needed this kind of sandboxing kind of time to figure this out. And if we were being charged a utilization charge during this time, I think it would’ve been difficult.
Now, I will say that PTC doesn’t actually have a utilization charge. They have a flat $30 a month rate, which I actually like. I know with a lot of AI stuff you know, a lot of it’s utilization and that gives me a lot of anxiety to think, you know, every token. That I have to count tokens when I’m writing code or you know, making translations.
So a flat $30 a month actually, I think really works for us.
Amber: I think to be fair, if it had been token based, we would not have been like, let’s do every language. We might’ve been like, let’s do Spanish and French. Pick the biggest languages and let’s do those. Because I mean, you know, we’re like a lot of WordPress plugin developers.
We’re trying to balance a lot of things with costs and you know, someday, maybe we’ll be multimillionaires, but we’re not. And so we have to always do that. So I, that was one reason why when I heard about PTCI brought it to you because it, the pricing I thought was really great.
Steve: I’m not sure if that’s an introductory pricing. ’cause the, I will, my review of the product is it does seem to be like fairly beta ish. I know it’s like fully released, but like we did encounter some bugs here and there.
Like we can’t really figure out how to delete projects and then it would like, we’d get into some instances where we would put out a new pot file in a PR, and then commit that to the develop branch, and it wouldn’t we wouldn’t get a PTC PR and and we’re like, what’s going on? Why isn’t this working? And we couldn’t figure out how to trigger it. So we actually had to create a new project and then it would run.
And then oddly enough that PR we were waiting for a long time ago, comes in like a couple hours later or like a half hour later. Like so there was some quirkiness with the way it works it’s not a hundred percent perfect right now, but I’m sure you know, this is a new product. It’s, they’re working out the bugs and stuff and it’s fairly, probably fairly complex what they’re doing on their end.
So we did encounter some bugs and some quirkiness with it. But I think I would agree that the flat $30 a month is definitely a great value for what it provides.
Amber: So what do you think your time cost is? I mean, or maybe you can, yeah.
Steve: A lot.
Amber: We could say let’s assume somebody’s hourly rate is a hundred dollars an hour for easy math. What do you think the cost to get it set up on our five plugins was? Or how many hours do you think you and William put into that?
Steve: Let me think. So it was probably, so we started it to halfway through the week when you guys were at working at EU. We worked on it mostly last week, and then we released the remaining add-ons earlier this week. So two weeks. I would say that maybe 50, 60 hours on it so if you’re talking about a hundred dollars an hour, that’s a significant five, six thousand dollar, right?
Which is a fairly significant cost. Could we have utilized that time to release a feature? Yeah, we totally could have. But it’s, it, I mean, going back to the beginning of this conversation I really think that accessibility and translation are kind of, they go together and it’s well, if we’re making an Accessibility Checker that is actually accessible itself, then we probably, this probably needs to be done.
And it’s something that’s been on our roadmap or, and that we want to do. We started it, it’s time to bite the bullet and just see it through.
Chris: Yeah. And speaking of seeing things through, there was also some discussion around strings inside of our accessibility checks where we’re checking for particular strings of text and translating those. Do you think that’s probably gonna be a few dev cycles out. Just to completely put you on the spot after you had a roadmap plan meeting literally yesterday.
Amber: An example for people who might not know what Chris is talking about is we have a check, like ambiguous anchor text that will flag on phrases like “click here” and will say, hey, your link language sucks.
But historically it only did English, it wouldn’t do whatever the equivalent is in Spanish or French or German or Dutch or whatever. So that’s what we’re wondering.
Steve: Yeah. Yeah. So there’s some thought that has to go into how that gets implemented.
So we on on the Global Accessibility Awareness Day, William and I kind of worked through that day and we created a plugin for adding play and pause buttons to animated gifs and to make those strings translatable in that plugin. We actually have settings where you can define what those should be.
In the plugin, if we take the translation at face, right? Like I can’t validate Korean, right? Like that, that Korean string is correct. Like I don’t know what click here is in Korean. So what we would be doing at that point is we would be taking the translation at face and just validating it against itself.
If the string on the website equals the translation, then it’s ambiguous.
Amber: Yeah.
Steve: But if that translation is off by any character or any phrasing, and it actually doesn’t match what most people in that language use as click here then it won’t flag. So that’s where it gets really difficult, ’cause that’s where you have to trust the translation 100% because you’re actually doing a comparison on it.
So you gotta ask yourself, is this gonna prevent more false positives or more false negatives? And is it better to actually expose those strings as a setting to the user and let them define what they are?
Amber: Yeah. So we’ve talked about this, maybe adding a field that allows you to say, what are phrases you want to flag?
And that is an interesting thing with translation. When I was having people look at it, one of the feedback pieces that Taco gave me about some of our CTAs in the free plugin in English, we frequently use the phrase like “get Accessibility Checker” on a link or a button. Button styled link. To be like, go get it. Go, go buy it.
But he’s like in Dutch, the way that translates it sounds ” click here to get Accessibility Checker Pro for free.”
Steve: Oh.
Amber: Because he says they just would never say, get it to them means I’m going to give it to you, not you can go out and acquire it, if that makes sense.
And so I think that’s an interesting thing too with this whole translation is that with some of the people, like some of the things they flagged, they’re like, this isn’t totally wrong. But it just doesn’t make sense like in a dialect, like I think you’re saying like click here. There might be another dialect thing that we don’t know.
Which is interesting too, like thinking about readability and all that, like as part of accessibility, which is why I think a lot of this ties into us making our own tool more accessible.
Steve: So I do wanna jump back a little bit.
And cover something we have listed in our notes here about challenges that occurred. And this will kind of speak a little bit to why it took so much time to kind of implement this. And I think it, it’s good for if there’s any developers or you know, product managers listening to kind of understand what you’re getting into a little bit when you move into translations like this.
So one, your plugin has to be translatable. Two, it has to be translatable in PHP and JavaScript. Translating in PHP is super easy. Translating in JavaScript is not super easy and very difficult. So we ran into issues with, even in WebPack.
It’s what we use to compile all of our scripts and assets. So we ran into issues with where our JavaScripts string were not translating and we just couldn’t figure it out. And actually, if we’re using template literals in JavaScript, which basically is you know, you do like a dollar sign and an open parentheses, and then you put a string and then you can actually put in variables into that string with, without having to use concatenation.
So with a template literal, you can just do this all in one string. Well, none of those were being translated. And actually what’s happening is our compiler was actually breaking and the breaking all the translation functions.
So we actually had to modify how all of our plugins get compiled and make sure that works properly. So for our workflow, when we make code changes, right? And you submit it up as a PR to the developed branch, right? And the developed branch is what’s being watched for the translations.
Well, you need a pot file. And a pot file has to be generated in WP CLI, well that means you gotta roll up a whole WordPress instance, run the command and then, and generate the pot file. Commit the pot file up. It’s a lot of stuff when you have in your workflow and actually, when you have manual steps like that in your workflow, we found that developers just won’t do it or they’ll forget about it.
A new developer will come in and not know it, or not read the docs, you know, things like that. So we actually created a workflow in GitHub, so anytime a PR gets submitted to the develop branch, it actually will run a workflow that actually rolls up, you know, in, in a container in GitHub. It’ll actually roll up the instance WP CLI. It’ll generate the pot file and it’ll commit it to that PR and it’ll also you also have to generate . Json files.
So just like you have your machine file, your .mo file, and your .po file that get generated. You also have JSON files, which are used for translating in JavaScript so that CLI script that we have actually generates those as well. PTC will generate JSON files for you, but they’re not in a format that WordPress recognizes.
Amber: Wait, I’m sorry. I thought JSON was one format. There’s WordPress, JSON, and there’s other JSON?
Steve: Well, JSON can be formatted in any way you want to format it. It’s a whole tree of information that can be formatted in any way you want. So we actually are generating those ourselves.
Amber: Now I don’t remember this. PTC is just targeted at any software developers. It’s not WordPress specific. Like they’re not trying to market it for WordPress plugins?
Steve: No, they are, they’re marketing it for a whole slew of software products, but WordPress is one of them in there.
Amber: Yeah, it’s just interesting to think like they’re JSON is not WordPress format, but that’s probably why if they’re not specifically only doing it for WordPress.
Steve: And you know, maybe that’s something that they’re working towards or maybe there’s a flag or something we have to put in somewhere to tell it, to give us the JSON files in a certain format.
But we were able through our GitHub workflow to generate those ourselves. And then beyond that, so now we have an automated continuous integration workflow, right? The developer really has to do nothing but properly translate their strings, which is just put the wrapper function around them.
Then it’ll automatically do it. So any of our plugins that get new strings, the stuff all runs. ‘Cause you don’t want the, you really don’t want this stuff to get stale as you move along in your project. And then I think the final piece is distribution, right? Just so we have distribution scripts in all of our plugins that we run.
And you really don’t want to package all of these files ’cause it makes the file size huge. Makes your packet size huge. We had to modify our dist scripts and stuff to actually only package in the JSON and the machine file, which is very small. I mean, with 32 languages you got, you’re gonna have lots of files in there.
Amber: Yeah, it’s every language times four files or three files or something.
Steve: Yeah, if you were to include them all, but if you actually just pluck out, use a write a distribution script that plucks out what you actually need in your distribution then you can keep that file size down.
And so it was definitely a very challenging process. I think we learned a lot and we actually, along the way the development team, we were actually kind of telling ourselves like, wow, this is amazing how hard this is. Yeah, no wonder plugins don’t get translated because it’s actually very difficult.
Amber: Yeah, beyond even having a human translator.
Steve: Totally.
Amber: Well, so I think we would all probably agree, obviously, ’cause we did it that it was worth the effort. I know from a marketing standpoint, I’m gonna be watching to see if we have increased sales. ‘Cause I don’t know was, were we getting more in Germany?
Because that was already translated like, so it’ll be interesting to see do we get a lot more French purchases now? I don’t know. But just maybe to wrap us up. What do we think would be good for devs to do if they want to start with translation. Should they just go out and try this?
Or maybe get some of that setup that you were talking about, Steve, like if they aren’t on GitHub, you need to get on GitHub. You need to figure out like what a, an automated workflow is. What’s the first step for somebody?
Steve: Yeah. So rewind the podcast episode back to the beginning and just do all the things we just talked about.
Amber: Yep. Alright, then. That’s the short answer.
Chris: I think it if I can just say one thing before you dive into the technical side, Steve. I think it, it’s important to pay attention to what your customers are telling you. And where you see them coming in from and where you see interest growing because that can be a leading indicator on whether translation should be a priority for you or not.
It also I think, is somewhat product dependent, so depending on what kind of product you have and what it’s intended to do probably matters a lot.
Steve: Yeah, I’m always thinking about the minimal effort for the maximum outcome, right? In software development particularly, because, you know, like I’ve stated, we’re all limited on time and resources, and I think if you’re a WordPress developer, there’s a high likelihood that the majority of your plugin is PHP based.
So look into the proper translation functions to use inside your plugin. And even if you don’t have any translation, just start adding those. Even though it won’t be translated, you’re making it translatable. So when it does, yeah, so when it does come up it’s not a shock to the system and you’ve got thousands of lines of code to go through and figure out what needs to be translated.
If you have your plugin on WordPress.org, I would consider going that route and making your plugin translation ready by making sure you get it up on Glot Press and that you have a pot file and that you have those strings translated and maybe reach out to people in the community on that team and see if you can maybe nudge them to help you get some of these strings translated.
It’s just like with accessibility, it takes a little bit of reframing your mindset around it and the importance of it. And I think, you know, it sometimes, you just think that everybody speaks your language. Everybody you know, and I know Americans are probably really bad at this, right?
Amber: We’re the worst about this, aren’t we?
Steve: Yeah. Yeah.
Amber: Speak English to me. Thank you.
Steve: Yeah. Just speak English and really we can go to Europe and most people speak English, even in non-English speaking European countries, they’re a lot of times taught English as a second language.
And so you could just say, well, everybody speaks English. They should just learn to speak anyways, which is kind of not cool and a little bit ignorant to even think that way, right?
So it’s just a little bit of reframing your mindset around it being important. And I would say just make those strings translatable and that will get you miles ahead.
Amber: Well, I think that is a great note to wrap up on. So thanks everybody for tuning in and feel free to reach out if you have any questions and we’ll see you back here in two weeks for another conversation. Bye.
Steve: See you guys.
Chris: Thanks for listening to Accessibility Craft. If you enjoyed this episode, please subscribe in your podcast app to get notified when future episodes release. You can find Accessibility Craft on Apple Podcasts, Spotify, and more. And if building accessibility awareness is important to you, please consider rating Accessibility Craft five stars on Apple podcasts.
Accessibility Craft is produced by Equalize Digital and hosted by Amber Hinds, Chris Hinds and Steve Jones. Steve Jones composed our theme music. Learn how we help make thousands of WordPress websites more accessible at EqualizeDigital.com.