Introduction# In Omeka S theme development, information in Japanese about implementing multilingual support is limited. This article explains the specific steps to make Omeka S custom themes multilingual, along with implementation notes.
Table of Contents# How Omeka S’s translation system works Files required for theme multilingual support Step-by-step guide Common mistakes and solutions Implementation examples Troubleshooting 1. How Omeka S’s Translation System Works# Omeka S uses gettext , a standard translation system. In this system:
.po files: Human-readable translation source files.mo files: Compiled binary files (actually used)$translate() function: Applies translations within PHP templates2. Files Required for Theme Multilingual Support# Required Directory Structure# y ├ │ ├ │ │ │ └ o ─ ─ ─ u ─ ─ ─ r - c └ l ├ ├ └ v └ t o ─ a ─ ─ ─ i ─ h n ─ n ─ ─ ─ e ─ e f g w m i t u t j j / e g h a e a a v / / e g m . . a m e p p m r e l o o i . a o i t u n e s i . p t o e t m p l a t e # # f # # i J J l I T a a e m r p p s p a a a ) o n n n r s e e t l s s a a e e n t t i t t : o r r n a a a n n d t s s d e l l m a a h p t t a l i i s a o o _ t n n t e r s b a o i n o u n s p r a l t c r a i e y t o i n o a n l s ) = " t r u e " 3. Step-by-Step Guide# Step 1: Configuring theme.ini# Add the following line to the [info] section of the config/theme.ini file:
[ n v a d o h i a e u e m a n m r t s e s f e s h c k _ o i o r a t ] = o r i _ r n p v a " = t e n Y = i r s o " o s l u " Y n i a r 1 o o t . u = n i T 0 r _ o h . " c n e 0 N T o s m " a h n e m e s = e m t N " e r " a a t m d i r e e n u " s t e c " r = i p " # t ^ i 4 ← o . n 1 T " . h 0 i " s l i n e i s i m p o r t a n t !
Warning: Without has_translations = "true", translation files will not be loaded.
Step 2: Creating Translation Files# 2.1 Creating the PO File# Create language/ja.po:
m m " " " " " " " " " " " # m m m m m m # m m m m m m s s P R P P L L L M C C P s s s s s s s s s s s s g g r e O O a a a I o o l N g g g g g g S g g g g g g i s o p T - s n n M n n u a i s i s i s e i s i s i s d t j o - R t g g E t t r v d t d t d t a d t d t d t r e r C e - u u - e e a i r r r r r r r " c t r v T a a V n n l g " " " c " " " " " t - e i r g g e t t - a H " B " S " h N " % " i " " - M a s a e e r - - F t o ホ r 閲 e 検 o 検 1 % t 件 I s t i n - : s T T o i m ー o 覧 a 索 r 索 $ 1 e の d g i o s T i y r r o e ム w " r " e R 結 d $ m ア - i o n l e j o p a m n " " s c s e 果 d s イ V d n - a a a n e n s e h u s が % % " テ e - - D t m \ : : s : " " l u あ 2 2 ム r B D a o : n f t l り $ $ " s u a t r " 1 t e n s t ま s s i g t e : J . e r p s せ " " o s e : a 0 x - l ん n - : Y p \ t E u F " : T 2 o a n / n r o o 2 0 u n " p c a u Y : 0 2 r e l o l n 2 5 s a d s d u 5 - N e i i = " r n - 0 a \ n n 1 " 0 1 m n ; g ; T 1 - e " : h - 1 \ c p e 1 3 n h 8 l m 3 " a b u e 1 r i r 1 2 s t a N 2 : e \ l a : 0 t n = m 0 0 = " 0 e 0 + U ; \ + 0 T \ n 0 9 F n " 9 0 - " 0 0 8 0 \ \ \ n n n " " " 2.2 Compiling the MO File# Compile the PO file into an MO file:
# # # # # m s I M U C C g n a b e o f s c u n m m t : n t p t a t O i l b u S l l r / / e i e D R n w e H l g b E a i i L n m n a : g s s n u g t : s a f a u g m l s d e t l u o / d j c g o y a o e u . m t a m m m t p o a e t i n x - n l d t g s a e t n ( t a g i l u f i l a n g n s g e e t e / e a t j d l t a e l e . d x p ) g t o e t t e x t Step 3: Using Translations in Templates# Usage in PHP Templates# < e $ e e ? ? c t c c > p h r h h h B o U a o U o p a s n s s $ i s $ a s i t n l t g p c h g a r e r i t a i u s w e n w n s - i s i t a > t = l t f g t h a h ( e r $ t $ a a t e s t n h ( p r s v i ' r a l a s S i n a r - e n s t i > a t l e a p r f a ( b l c t ' l u h f e S e g ' o ( e i ) r ' a n ; m % r ( a 1 c ' t $ h t d ' r ) a % ; n 2 s $ l s a ' t ) e , ' ) $ ; c o u n t , $ t r a n s l a t e ( ' i t e m s ' ) ) ; Implementation Example# < < ! d / - i d - v i < < v c b / b / i l u b u b e a t u t u w s t < t t < t / s o s t o s t s = n p o n p o e " a n a n a b t n > t n > r t y > y > c n p < p < h - e ? e ? / g = = = = r r " " e o b $ b $ s u u t u t u p t r t r l " t a t a t > o n o n s n s n s - " l " l h a a e a t a t a r e r e d i ( i ( e a ' a ' r - G - L - l r l i f a i a s o b d b t o e ' e ' t l ) l ) e = = r " ? " ? . < > < > p ? < ? < h = / = / t s s m $ p $ p l t a t a r n r n a > a > n n s s l l a a t t e e ( ( ' ' G L r i i s d t v v i i e e w w ' ' ) ) ? ? > > " " > > 4. Common Mistakes and Solutions# Mistake 1: Creating Module.php# c l a U s n s n e M c o e d s u s l a e r y e ! x t N e o n t d s n e A e b d s e t d r a f c o t r M o t d h u e l m e e s { } Solution: Module.php is not needed for themes. has_translations = "true" alone is sufficient.
Mistake 2: Case Mismatch# m m < s s ? g g = P i s P O d t H $ r P t f " r i G " t a l r グ e n e i リ m s d ッ p l " ド l a " a t t e e ( ' g r i d ' ) ? > W o n ' t w o r k ! Solution: Translation keys are case-sensitive. Make sure they match exactly.
Mistake 3: Incorrect Language Code# # l # l a a W n C n r g o g o u r u n a r a g g e g e c e / t / j j a a _ . J p P o . p o # # O U m s e e k a s i S m p m l a e y l n a o n t g u r a e g c e o g c n o i d z e e s j a _ J P
5. Implementation Examples# Multilingual Language Badge Display# < $ ] $ ? < ? l ; l > s p a a p h C n n a p o g ' ' ' ' ' g ? : n n u e j f d e u v a n a r e s a $ s c e g ' ' ' ' ' g l t l r e e a r a t N = = = = = D n t s a > > > > > i g o s l m s u u = a e $ $ $ $ $ p a p " n s t t t t t l g p b g r r r r r a e e a u = a a a a a y N r d a n n n n n a ( g g [ s s s s s = m $ e e l l l l l e v a a a a a i s a b c t t t t t s [ l g o e e e e e s $ u - d ( ( ( ( ( e v e s e ' ' ' ' ' t a L e s E J F G S ( l a c n a r e p $ u n o t g p e r a l e g n o l a n m n a L ) d i n c a i n a ; a l s e h n s g n r a h s ' ' h u g y n ' e ) ) ' a ] " g ) ' , , ) g > u , ) , e < a , N ? g a = e m e $ n s e a [ s m $ c e v a s a p l e u ( e $ L l a a n n g g ] u ) a g e D i s p l a y ) ? > < / s p a n > Displaying Item Count# [ n v a d o h i a e u e m a n m r t s e s f e s h c k _ o i o r a t ] = o r i _ r n p v a " = t e n Y = i r s o " o s l u " Y n i a r 1 o o t . u = n i T 0 r _ o h . " c n e 0 N T o s m " a h n e m e s = e m t N " e r " a a t m d i r e e n u " s t e c " r = i p " # t ^ i 4 ← o . n 1 T " . h 0 i " s l i n e i s i m p o r t a n t !
0
6. Troubleshooting# Checklist When Translations Are Not Applied# Check theme.ini [ n v a d o h i a e u e m a n m r t s e s f e s h c k _ o i o r a t ] = o r i _ r n p v a " = t e n Y = i r s o " o s l u " Y n i a r 1 o o t . u = n i T 0 r _ o h . " c n e 0 N T o s m " a h n e m e s = e m t N " e r " a a t m d i r e e n u " s t e c " r = i p " # t ^ i 4 ← o . n 1 T " . h 0 i " s l i n e i s i m p o r t a n t !
1
2. Check MO file
[ n v a d o h i a e u e m a n m r t s e s f e s h c k _ o i o r a t ] = o r i _ r n p v a " = t e n Y = i r s o " o s l u " Y n i a r 1 o o t . u = n i T 0 r _ o h . " c n e 0 N T o s m " a h n e m e s = e m t N " e r " a a t m d i r e e n u " s t e c " r = i p " # t ^ i 4 ← o . n 1 T " . h 0 i " s l i n e i s i m p o r t a n t !
2
3. Clear cache
* Browser: Ctrl+Shift+R (Windows/Linux), Cmd+Shift+R (Mac)
* When using Docker: Restart the container
[ n v a d o h i a e u e m a n m r t s e s f e s h c k _ o i o r a t ] = o r i _ r n p v a " = t e n Y = i r s o " o s l u " Y n i a r 1 o o t . u = n i T 0 r _ o h . " c n e 0 N T o s m " a h n e m e s = e m t N " e r " a a t m d i r e e n u " s t e c " r = i p " # t ^ i 4 ← o . n 1 T " . h 0 i " s l i n e i s i m p o r t a n t !
3
4. Check language settings
* Omeka S admin panel -> Site settings -> Set language to "Japanese"
* User settings -> Set language to "Japanese"
Debugging Method# [ n v a d o h i a e u e m a n m r t s e s f e s h c k _ o i o r a t ] = o r i _ r n p v a " = t e n Y = i r s o " o s l u " Y n i a r 1 o o t . u = n i T 0 r _ o h . " c n e 0 N T o s m " a h n e m e s = e m t N " e r " a a t m d i r e e n u " s t e c " r = i p " # t ^ i 4 ← o . n 1 T " . h 0 i " s l i n e i s i m p o r t a n t !
4
Summary# Multilingual support for Omeka S themes can be achieved in the following three steps:
Add has_translations = "true" to theme.ini Place translation files in the language/ directory Use the $translate() function in templates Module.php and module.config.php are not needed, and multilingual support can be achieved with simple configuration.
Reference Links# This article was created based on actual Omeka S theme development experience. Tested with version 4.1.0.