For most nonprofits, the hardest part of fundraising online isn’t asking — it’s the plumbing. Accepting a donation should take three taps, work on a phone, settle in the local currency, and send a thank-you the donor can actually read. For an organization serving people in more than one language, that’s deceptively hard.
Here’s how we built exactly that for the Alo!Mik Foundation, an Albanian NGO supporting vulnerable children and families — a donation and summer-camp registration system that works natively in Albanian, English and French, and processes payments through a local Albanian gateway.
The starting point
We’d already consolidated three of the foundation’s websites into a single custom WordPress build. It looked great and was easy to manage — but it was still a brochure. The next step was to make it transact: take donations and fill the foundation’s summer camp without anyone emailing back and forth or handling cash.
The requirements
The brief was specific, and every line of it had a technical consequence:
- Donations of any amount — suggested tiers and a free-choice field.
- Sell camp places, with a two-installment option: a first payment to reserve a child’s spot, a second to complete the registration.
- Three languages — Albanian for families at home, French and English for the diaspora.
- Confirmation emails in the donor’s own language — worded correctly for what they did (a gift is not a camp booking).
- Local payment processing — Albanian supporters should pay in Lek, with the methods they already use.
The build — and the decisions behind it
1. WooCommerce as the engine, not a donation plugin
Most ‘donation button’ plugins are fine until you need a second use case. Because the foundation also needed to sell camp places — with stock, installments and per-attendee data — we built the whole thing on WooCommerce. One system handles both donations and ticketing, with one checkout, one set of orders, and one place to reconcile everything. The donation itself uses a custom flexible-amount form so supporters can give any amount, not just preset ones.
2. A local payment gateway
For an Albanian audience, ‘pay with your card’ only works if the card actually goes through. We integrated a native Albanian gateway (POK Payments), so transactions are processed and settled locally in Lek — no currency confusion, higher completion rates. One lesson worth passing on: gateways like this issue separate keys for test and production, and they are not interchangeable — a detail that’s easy to misdiagnose if you don’t know to look for it.
3. Language-aware and type-aware confirmation emails
This is the part most multilingual setups get wrong. It isn’t enough to translate the website; the confirmation email has to arrive in the supporter’s language too — and say the right thing. We built a custom email layer that reads each order’s language and sends the matching message: a warm, heartfelt thank-you for a donation, a clear ‘your child’s place is confirmed’ for a camp registration — each in Albanian, English or French. A French donor gets a French thank-you; an Albanian parent gets an Albanian confirmation. No manual switching, no English fallback.
4. Installment-based ticketing
The camp uses a two-payment model, so we structured it as two linked products — a reservation payment and a completion payment — with a simple per-participant form at checkout so the foundation knows exactly who’s coming.
The result
The foundation now runs a self-service fundraising and registration channel that works in three languages, settles in local currency, and confirms every transaction in the supporter’s own language. The friction that quietly kills online giving — wrong currency, confusing checkout, a confirmation nobody can read — is gone.
Thinking about this for your organization?
If your nonprofit needs to accept donations or registrations online — in one language or several, with local payment processing — this is exactly the kind of system we build. It runs on tools you own (no per-donation SaaS fees eating into what supporters give), and it’s designed to be managed by your own team.