PVFirms is my multilingual directory of solar-industry companies. The platform uses Laravel, Inertia, React, TypeScript and PostgreSQL. Its content workflow includes scheduled LLM generation orchestrated through n8n, with locale coverage checks and an English fallback.
The project covers 31 locales and a source set of around 1,600 interface translation keys. Those figures describe the implementation scope. They do not imply that every company record has equally complete content in every language, or that generated copy needs no review.
Interface language and company content are different
A translated search button is an interface concern. A company description is a content concern. The two appear together on the same page, but they have different sources, update cycles and quality checks.
I separate them when reasoning about completeness. A locale can have a usable interface while some company content is still unavailable in that language. Conversely, translated descriptions do not make the navigation, validation messages or account screens complete.
This distinction makes progress measurable. Instead of calling a locale “finished” because a generation job ran, the system needs to compare what should exist with what is actually available in each content class.
A fallback should preserve usability
PVFirms uses English as a fallback. The purpose is to keep the application usable when a localized value is missing. Laravel supports a fallback language for missing translation strings, but application content still needs its own deliberate handling.
A fallback can also hide unfinished work if nobody measures it. A page may render successfully because it found an English value, even though the requested locale has no translation. I therefore treat successful rendering and locale coverage as separate questions.
For a review, I want to know which keys are missing, which content intentionally falls back and which values are empty or malformed. A green generation status alone does not answer those questions.
Automation needs a stable source
The scheduled content pipeline makes repeated work manageable across many locales. Its usefulness depends on a stable source identity: the job should know which key or record it is working on and which source content it is transforming.
My design questions for this kind of pipeline include how a source change makes an older translation stale, how to distinguish missing work from completed work and how to keep a retry from replacing a reviewed value accidentally. The exact implementation can vary; the need to preserve those distinctions does not.
Translation also has structural requirements. Placeholders, links and product or company names may need to survive unchanged. A sentence can sound natural while breaking an interface if a required placeholder disappears.
Directory facts need a different standard from prose
A company directory mixes descriptive writing with factual fields. Names, locations, websites and service categories should not be invented simply to make a profile look complete. An LLM can help transform supplied material, but generated fluency is not evidence that a business claim is true.
For content review, I distinguish a source-backed fact, a translation of that fact and newly generated explanatory prose. This makes it easier to decide what can be published automatically and what needs additional checking. It also prevents an absent field from quietly becoming a confident sentence.
The same principle applies to multilingual discovery. A localized page should preserve the underlying company identity, rather than behaving like a different record because its wording changed.
Operate the content as part of the application
PVFirms brought localization, generated content and ordinary application engineering into one product. My focus is on coverage, recoverability and understandable content state, alongside the pages that visitors see.
A multilingual directory becomes maintainable when operators can tell what exists, what is missing, what falls back and what needs review. That is the useful output of a content system: a repeatable way to keep information coherent as both the directory and its languages grow.
Technical reference: Laravel documentation on localization and fallback languages.
Updated 26 September 2026.