feat: add photo cap per event and Portuguese (pt-BR) locale

- Add photo_cap column to events table (migration 074) to limit photos per event
- Enforce photo cap in upload route, returning 400 when limit exceeded
- Pass photo_cap through all event CRUD routes and frontend forms
- Add complete Portuguese (pt-BR) translation (2300+ strings)
- Register pt locale in i18n config, language selector, date formatting
- Add photoCap/photoCapHelp translation keys to all locale files (en, de, ru, pt)
This commit is contained in:
Paul Nothaft
2026-03-16 17:22:54 +01:00
parent 6aceb40595
commit 1fa222e9c4
19 changed files with 2451 additions and 12 deletions
@@ -29,10 +29,20 @@ const RUFlag: React.FC<{ className?: string }> = ({ className = "w-5 h-5" }) =>
</svg>
);
const PTBRFlag: React.FC<{ className?: string }> = ({ className = "w-5 h-5" }) => (
<svg className={className} viewBox="0 0 640 480" xmlns="http://www.w3.org/2000/svg">
<path fill="#009B3A" d="M0 0h640v480H0z"/>
<path fill="#FEDF00" d="M320 39.4 590.4 240 320 440.6 49.6 240z"/>
<circle fill="#002776" cx="320" cy="240" r="95"/>
<path fill="#FFF" d="M226.3 262.8c0-27 12.8-51 32.7-66.3a95.3 95.3 0 0 0-3.5 120.6c-17.8-14.8-29.2-37-29.2-54.3z" opacity=".5"/>
</svg>
);
const languages = [
{ code: 'en', name: 'English', Flag: GBFlag },
{ code: 'de', name: 'Deutsch', Flag: DEFlag },
{ code: 'ru', name: 'Русский', Flag: RUFlag },
{ code: 'pt', name: 'Português', Flag: PTBRFlag },
];
export const LanguageSelector: React.FC = () => {