Gospel in Life
A five-year campaign to translate Tim Keller's sermons into 30 languages had to prove on day one that the work was already underway.

The challenge
Gospel in Life publishes nearly 2,000 of Tim Keller's sermons. After two years of development, it launched The Global Reach Project to fund translating 500 of them into 30 languages over five years, with a public launch set for October 1. The ministry's worry from the first call was that donors would read the campaign as a plan to start someday. It needed proof the work was already underway: a new campaign site in six languages, and translated sermons on gospelinlife.com, a site with no multilingual support at all. There were eight weeks to do it.
What we built
We built one translation process with two publishing paths. The campaign site is a custom Next.js app that reads its copy from a translation tool, so a saved edit is live within seconds. Gospel in Life's WordPress site gained a lightweight language layer of our own design, fed by a custom import from the translators' spreadsheet, with translated sermons at their own addresses. Both launched on October 1, in English, Spanish, French, Brazilian Portuguese, Bahasa Indonesia and Mandarin.
- The Global Reach Project campaign site: Next.js on Vercel, six languages, built from Whiteboard's design.
- Language layer for gospelinlife.com: one post per translation, prefixed URLs like /es/sermon/, no plugin.
- Language-scoped sermon lists, search, related sermons, hreflang tags and sitemap entries across the existing site.
- In-context editing and no-deploy publishing between the translation tool and the campaign site.
- 15 WP-CLI commands to import translated sermons, compile UI strings and build each language's pages.
- Funraise giving, region-aware cookie consent and one-tap Vimeo playback on the campaign site.
Proof that the work had already started
The Global Reach Project's message is simple: Tim Keller's sermons in English reach a fraction of the world, and translation can bring them to most of it. For a donor, the most convincing evidence is a sermon in their own language they can play right now. So the launch had two halves that had to go live on the same morning.
- The campaign site, theglobalreachproject.com: six pages on the vision, the process, the reach and the funding, with a Listen block that plays a translated sermon in each language.
- gospelinlife.com, the ministry's existing WordPress site, where the translated sermons live with their audio, series and search.
Whiteboard, a Chattanooga creative agency, designed the campaign site. We built it, added the multilingual layer to gospelinlife.com, and connected both to the translation workflow. Mission Lab has built and supported gospelinlife.com since 2023, so we already knew its sermon library, search and audio player from the inside.

Six languages, one layout
Whiteboard's design was custom down to the scroll animations, so a page builder was out. We recommended a Next.js app on Vercel instead of WordPress. Every word on the site, English included, is edited in the translation tool, so Gospel in Life's staff change copy without a developer or a redeploy. The first full draft was ready on August 18, about two weeks ahead of schedule.
Translated copy runs longer than English, which breaks layouts designed in English. Before any real translation arrived, we tested every page with copy padded by 60% at phone, laptop and wide-screen sizes. The header chooses its layout by measuring whether the navigation actually fits, not by screen width, because French and Spanish need more room than English. The codebase also rejects left- and right-specific CSS, so right-to-left languages can be added later without a rewrite.
Giving opens the campaign's Funraise form on the page. The films start with sound in a single tap on an iPhone, which normally asks for a second one.

Five new languages on a 1,982-sermon site, without a plugin
gospelinlife.com was English-only, with nearly 2,000 sermons, 240 series and ElasticPress search. A plugin like WPML would have added its own translation tables, editing screens and query rewriting to every sermon, and meant reworking search during launch week. Instead, we built a lighter layer on what the site already had, in about nine days.
- One post per translation. Each translated sermon is its own record, linked to its English original and tagged with a language. Editors work with sermons the way they always have.
- Languages are settings. URL prefixes such as /es/ and /pt-br/, native names, menus and landing pages are stored on each language, and the site builds its addresses from them.
- One rule keeps visitors in their language. A single filter applies to every sermon grid, related list, archive, feed and search, so we didn't have to rewrite templates one by one.
- Search, scoped on purpose. Search returns only sermons in your language. Language-aware word matching would have meant rebuilding the live search index during launch week, so we left it for later, when each language has more sermons.
- Mandarin addresses people can read. Sermon URLs are generated in pinyin from the Chinese title, with an override for words that read more than one way.
Each translated sermon also tells search engines which language it's in and where its English original is, and it keeps its own play counts.

One translation process, two publishing paths
Gospel in Life contracts translators and a supervisor for each language. They needed to edit and approve copy without WordPress logins, and without touching another language by accident. Craig Van Korlaar, our lead UX strategist, who runs Crafting Copy, built the core of a translation tool where each person can edit only their assigned languages. Re-importing never overwrites an edited or approved translation, and when the English changes, the translation drops back to draft for review.
We connected the tool to the campaign site:
- Editing on the live page. The tool shows the real campaign site beside an editor, with untranslated and draft text marked, so supervisors judge wording where it actually appears. The tool frames the site rather than the other way around. That keeps sign-in simple and keeps the editor off the public site.
- Live without a deploy. A saved edit tells the site to refresh that copy, and the change appears within seconds.
Sermons take the second path. Translators fill one tab per language in a shared spreadsheet, and our import brings in only rows marked published. Gospel in Life describes its process publicly: an AI first draft, then a native-speaking translator and a supervisor, then audio generated in Dr. Keller's voice and checked by native speakers.
Launch night with the switch off
Translators began filling in sermons in mid-September, and the last content was due two days before launch. Deploying on launch morning would have put every risk into one hour. So the night before, we shipped all the code and all 227 translated sermons to production with the language switcher hidden from the public. Gospel in Life's staff could see and check everything while signed in.
On the morning of October 1 we turned the switcher on, then confirmed all six campaign pages in all six languages, the language tags, the donate buttons and the Listen audio. Both sites went public alongside the campaign's videos and email, on the date set at the first planning call. We continue to work with Gospel in Life each week as new translated sermons are added.





Explore another project.
Want a site your whole church will use?
Start with the free church website report, or get a free review of your current site.

