KeepPin in 40 Languages: How We Built Right-to-Left Support
Version 1.3.0 of KeepPin, released today, adds 40 languages to the site, including full right-to-left layouts for Arabic, Persian, Hebrew and Urdu. This is a short account of why a tool as simple as a downloader needed translation at all, what a right-to-left page actually changes, and what stays exactly the same no matter which language you read it in.
Why a downloader needs to speak your language
The download button is easy to translate. The hard part is everything around it. When a pin cannot be fetched, KeepPin has to tell you why: the link points to a board rather than a pin, the pin is on a secret board, the download link has expired, or the pin was deleted. Each of those messages leads to a different fix. An English error message in front of a Turkish or Arabic reader turns a two-second correction into a guessing game.
Pinterest itself is thoroughly localised and serves the same pins across dozens of country domains, which is why the country domains article exists. Someone copying a link from a Japanese or German Pinterest page is usually reading Pinterest in that language, and it would be odd to send them to a downloader that only speaks English. The legal notes matter too: the copyright and DMCA pages explain what you can and cannot do with a saved file, and that is not text you want anyone to skim in a language they half understand.
How the 40 languages are organised
English lives at the root of the site: keeppin.app is the English home page and /en/blog is this blog. Every other language lives under a short prefix, so Turkish is at /tr, and the other languages follow the same pattern with their own codes. Each localised home page is a full page, not a machine-translated overlay, with the video, image and GIF downloaders, the FAQ and the legal pages all translated.
Switching is deliberate rather than automatic. The site does not guess your language from your location and silently redirect you, because a traveller in one country reading in another language should not be second-guessed. Use the language switcher in the header, or go straight to the prefixed URL. The blog stays in English for now.
If you paste a link from any Pinterest country domain into any language version of KeepPin, the result is the same file. Language changes the words on the page and nothing else, which is a theme this article keeps returning to.
What right-to-left actually changes
Four of the 40 languages, Arabic, Persian, Hebrew and Urdu, are written from right to left, and supporting them properly means more than translating strings. The page has to be mirrored.
Think of every horizontal decision in a layout: where the logo sits, which side the language switcher is on, where the paste box's button goes, the direction a progress indicator fills, which way a back arrow points. In a left-to-right page all of those lean left. In a right-to-left page they should lean right, so that the reading order of the interface matches the reading order of the text.
The old way to do this was to write a second stylesheet that flipped every margin-left to margin-right. The modern way, and the one KeepPin uses, is CSS logical properties. Instead of margin-left, a rule says margin-inline-start, which means "the side where a line begins" and resolves to the left in English and the right in Arabic, with no second stylesheet. MDN's guide to CSS logical properties and values covers the full vocabulary. Rewriting the site's styles this way was most of the work, and it means adding a fifth right-to-left language later is a translation task rather than a layout one.
A few things are intentionally not mirrored. Icons that represent a physical direction, like a play triangle, keep their shape. Numbers, dates and file sizes read the same way in every language. And the media itself is never touched.
Mixed-direction text: a Latin URL inside an Arabic sentence
The trickiest detail on a downloader is the input box, because the thing you paste into it is always a left-to-right string of Latin characters, even when the page around it reads right to left. The same problem appears in error messages that quote a link, or in a sentence that mentions pinterest.com.
Browsers handle this with the Unicode bidirectional algorithm, described in the Unicode bidi report. It decides, character by character, which runs of text flow which way, so that an Arabic sentence can contain an English URL without the punctuation jumping to the wrong end. Most of the time it gets things right on its own. Where it can stumble is at the edges of a URL, where a trailing slash or a colon can attach itself to the neighbouring Arabic text and appear on the wrong side.
KeepPin's fix is to isolate every URL and file name from the surrounding text so that the algorithm treats it as its own left-to-right island. The input box itself is set to left-to-right regardless of page language, because a pasted link is easier to read and check when it runs the way the characters were written, while the label and placeholder around it follow the page direction.
What stays the same
Everything that matters for the download is language-independent.
- The pin link. A
pinterest.com/pin/<id>/URL or apin.itshort link is parsed identically on every language version. The pin ID is a number and numbers have no language. - The resolver. One parser serves all 40 languages. When it is updated to keep up with a Pinterest change, every language benefits at once.
- The file. Video is MP4 at the resolution Pinterest stores, images are the original upload, GIFs are a GIF or a silent MP4, as the complete guide to saving Pinterest videos describes.
- Privacy. Nothing is stored on KeepPin's servers and no log of pasted links is kept, in any language, as laid out in how KeepPin works. Localisation added translated text, not tracking.
- The limits. Secret boards, private accounts and deleted pins are out of reach in Arabic exactly as they are in English.
Accessibility and testing
Translation is a chance to get the fundamentals right for everyone, not only for readers of a particular script. Each localised page declares its language and direction to the browser, so screen readers switch voices correctly and pronounce Persian as Persian rather than as mangled English. Form labels, button names and error messages are announced in the page language. The W3C's Web Accessibility Initiative publishes the guidance KeepPin follows here, including its material on internationalisation and text direction.
Before release, each right-to-left language was checked by reading through the entire flow, from pasting a link to saving a file, and by pasting deliberately broken links to make sure the error messages read naturally rather than as a scramble of reordered fragments. Native readers spotted several places where a sentence was grammatically fine but sounded like a manual, and those were rewritten.
Mistakes will remain. If a translation is wrong, or a layout looks off in your language, the contact page is the right place to say so, and fixes ship as part of regular releases.
What comes next
The translation files and the logical-property stylesheet were built to be reused. A browser extension for Chrome and Edge is in development, and when it arrives it will draw on the same strings and the same resolver rather than starting from English and working outward. The extension roadmap explains what that extension will and will not do; for now the website, in whichever of the 40 languages you prefer, is the way to save a pin.
Related reading
Ready to Save a Pin?
Paste any Pinterest link into KeepPin and keep the original file. Free, no account.
Download Now