Multilingual Support for Omeka S Themes

Introduction When developing Omeka S themes, information about implementing multilingual support is limited. This article explains the specific steps for making an Omeka S custom theme multilingual, along with important notes for implementation. Table of Contents How the Omeka S Translation System Works Files Needed for Theme Multilingual Support Step-by-Step Guide Common Mistakes and Solutions Implementation Examples Troubleshooting 1. How the Omeka S Translation System Works Omeka S uses the gettext standard translation system. In this system: ...

August 14, 2025 · 14 min · Nakamura

How to Dynamically Convert File Paths on Azure Storage Using Cantaloupe Delegate Scripts

Introduction When using Azure Storage with the IIIF server Cantaloupe, the IIIF URL identifier may differ from the actual file path on Azure Storage. This article provides a detailed explanation of how to solve this problem using delegate scripts. The Problem Suppose you are managing images with the following file structure: A ├ │ │ │ │ │ │ │ z ─ u ─ r e i ├ │ │ │ │ └ m ─ ─ S a ─ ─ t g o e c ├ │ └ c └ r s ─ ─ o ─ a l ─ ─ l ─ g l l e e i └ i └ e c t ─ t ─ c C t e ─ e ─ t o i m m i n o 0 i 0 i o t n 0 t 0 t n a 1 1 e 2 e 2 i / / m / m / n 0 0 e 0 0 r 1 2 : _ _ 0 0 m 0 0 y 1 1 c . . o j j n p p t g g a i n e r However, you want to access them via IIIF URLs like: ...

August 12, 2025 · 17 min · Nakamura

Implementation Guide for TEI XML Schema Combining RELAX NG and Schematron

! After manual verification, an AI wrote this article. Introduction When editing TEI (Text Encoding Initiative) XML, in addition to structural validation of elements and attributes, more complex business rule validation may be needed. This article explains how to combine RELAX NG (RNG) and Schematron to achieve both structural and content validation, using challenges encountered in an actual project as examples. The Problem to Solve When editing classical Japanese literary texts in TEI XML, the following requirements arose: ...

August 9, 2025 · 20 min · Nakamura

Setting Up the WDB Module on Drupal 10 in a Docker Environment

Overview This article explains the steps to build Drupal 10 in a Docker environment and install the WDB module for linguistic databases. Prerequisites Docker Desktop is installed Git is installed Steps 1. Building the Docker Environment First, create a docker-compose.yml file: s e o r m d l m v a r u a i r i r e u i d p r m r c i m e o n p m o e o e e i e a a s l - v M M M M a a l p - r - s s a s d g t u i Y Y Y Y l g u e t t : d : b e a m m r S S S S : e m n m s 8 a b : : r e a o Q Q Q Q : e / d a : 0 r : t s r n L L L L s d d d d s r 8 t m : : i m _ _ _ _ d : r r r r _ i 0 : { a a e R D U P r u u u u o a : } r a d n O A S A u p p p p n d 8 a i l b t O T E S p a a a a : b 0 l a w : : T A R S a l l l l w d a / _ B : W l / / / / a b y v P A O : f m t p y : s a A S d R 1 i o h r s l r S E r D 0 l d e i a / S : u : . e u m v t l W p 2 s l e a e i O d a d . : e s t s b R r l r 7 / s : e t / D u u - o : : m : p p p p o / y a a h t p o s d l l p p t p q r 8 d t t l u . r d / p 2 u d r d a - p r u r l a a u p u p l p a p a / a l a c w l l h e w / e b w e p - / e b r b s b i u i t v l t m h a l e o e t s s d m e e / u e y d l s e e e f s a u l t / f i l e s Next, create the necessary directories and start the containers: ...

August 7, 2025 · 7 min · Nakamura

Creating Project-Specific RNG Files Using Generative AI

Overview When editing TEI/XML files, changing the RNG file used for validation allows you to limit the tags and attributes available. This offers benefits such as preventing workers from being confused by tag choices and reducing inconsistencies in the created TEI/XML. As a method for editing RNG files, using Roma is common, as introduced in the following article. This is a top-down approach to limiting available tags and attributes, but this time we try creating an RNG file bottom-up from existing TEI/XML using generative AI. ...

August 1, 2025 · 37 min · Nakamura

Introducing Omeka S Docker: A Modern and Secure Solution for Digital Collections

! This article was created by AI. Welcome to Omeka S Docker! This project provides a production-ready Docker setup for Omeka S, a web publication system for universities, galleries, libraries, archives, and museums. GitHub Repository: https://github.com/nakamura196/omeka-s-docker Why Omeka S Docker? Managing digital collections does not need to be complex. That is why we created a Docker-based solution that simplifies deploying and managing Omeka S. Key Features Quick Setup: Get Omeka S running within minutes with a single command Security First: Built with security best practices including non-root containers and secure default settings Module Management: Automatic installation and updates of popular Omeka S modules Easy Upgrades: Seamless version upgrades while maintaining data persistence Production Ready: Optimized for both development and production environments Traefik Integration: Built-in support for reverse proxy and SSL termination Getting Started Prerequisites Docker and Docker Compose installed Basic command line knowledge (Optional) A domain name for production deployment with SSL Understanding Setup Options This Docker setup provides two deployment modes: ...

July 30, 2025 · 6 min · Nakamura

I Built a Prototype IIIF 3D Viewer

! This article was generated by AI. Introduction In the field of digital humanities, the 3D digitization of cultural properties and historical materials is rapidly advancing. However, appropriate tools are needed not only for simply viewing 3D models but also for utilizing them in academic analysis and education. This article introduces “IIIF 3D Viewer,” a web application for viewing 3D models that complies with the IIIF (International Image Interoperability Framework) standard. ...

July 29, 2025 · 6 min · Nakamura

Trying Out the Viewer from the "Pre-modern Japan-Asia Relations Digital Archive"

Overview The “Pre-modern Japan-Asia Relations Digital Archive” was released on July 25, 2025. https://asia-da.lit.kyushu-u.ac.jp/ The viewer is also available at: https://github.com/localmedialabs/tei_comparative_viewer In this article, I share my experience trying out this viewer. As a result, I was able to self-host it as shown below: https://tei-comparative-viewer.aws.ldas.jp/ It loads the following XML file of “Kaitoshokokki” (Record of Countries and Peoples in the Eastern Sea): https://asia-da.lit.kyushu-u.ac.jp/viewer/300 Running Locally Detailed instructions are provided at the following link, which I followed to get it running: ...

July 29, 2025 · 33 min · Nakamura

Next.js 15 Compatible Multilingual and Dark Mode SSG Template

This article was reviewed by a human for implementation and written by AI. Overview This template is a starting point for web application development that supports static site generation (SSG) with Next.js 15, with built-in multilingual support and dark mode. It combines TypeScript, Tailwind CSS, next-intl, and next-themes. https://nextjs-i18n-themes-ssg-template.vercel.app/ja/ Key Features 1. Static Site Generation (SSG) Full static export with output: 'export' Fast page loading and SEO optimization Reduced hosting costs 2. Internationalization (i18n) Full multilingual support with next-intl Japanese and English support (easy to add more languages) URL-based language switching (/ja/about, /en/about) Type-safe translation keys 3. Dark Mode System-linked dark mode with next-themes Automatic detection of user preferences Smooth theme switching animation Persistent settings via LocalStorage 4. Improved Developer Experience Type safety with TypeScript Efficient styling with Tailwind CSS Code quality management with ESLint Unified component structure Tech Stack { } " } d e " " " " " " p n r n n t @ e e e e e a t n x a x x i a d t c t t l i e " t - - w l n : " i t i w c : n h n i i " t e d n e ^ " l m c d s 1 ^ " e s c " 5 1 : s s s : . 9 " " s 4 . " : : / { . 1 ^ t 4 . 4 " " y " 0 . ^ ^ p , " 3 0 4 o , . . . g 4 4 1 r " . . a , 6 1 p " 1 h , " y , " : " ^ 0 . 5 . 1 6 " Project Structure s ├ │ │ │ │ │ │ │ ├ │ │ │ │ │ │ │ ├ │ └ r ─ ─ ─ ─ c ─ ─ ─ ─ / a ├ │ │ │ │ ├ └ c ├ │ │ │ │ │ └ i └ m ├ └ p ─ ─ ─ o ─ ─ 1 ─ e ─ ─ p ─ ─ ─ m ─ ─ 8 ─ s ─ ─ / p n s [ ├ ├ ├ └ i s o l ├ ├ ├ ├ └ p / r a e j l ─ ─ ─ ─ c i n a ─ ─ ─ ─ ─ a o g n a o ─ ─ ─ ─ o t e y ─ ─ ─ ─ ─ g u e . . c n e n o e t s j j a l p a e . m t u H F P T T i / s s l a a b x s a s t e o a o n o o e y g o a v p / a o g g g g n n ] e u m g . d t e g g . u . t p t e e L l l t t t / l s r r a e e s . s e . . y T L t x / t t o h a s s s u e n x x x t m g . e u t . a s t g x s e x . # # # t # # # # # # # s F S L x P i T R H A S a i a a 1 r o o b a v t y g 8 a o m o m i e o e n n t e u p c m u - s t l o a t s c l l p e n p p o a a a p c e n t y g a p g o c f i o e g a e m i i o u e g n p f g n t e e o i u r n c r f a e a i t n c t l i t o i e o s m o s n p n o n e n t s Notable Implementations 1. Static Export Support for sitemap.ts e e e } x x x p p p o o r r r t t t I m c c d p o o e l n n f e s s a m t t u e l n d r t t y e a n v f t a a u i m l n o i i c n c d t a i = t o e n ' f = s o i r f t c a e e l m - s a s e p t ; ( a ) t : i c M ' e ; t a d a t a R o u t e . S i t e m a p { 2. Unified Page Layout < P / a b t d < P g r i e Y a e e t s o g L a l c u e a d e r r L y c = i C a o r { p o y u u t t n o t m ( i t u b ' o e t I t n n > t i = t e t { m l t s e ( = ' ' { ) d b } e r s e c a r d i c p r t u i m o b n I ' t ) e } m s } 3. Configuration via Environment Variables # N N E E . X X e T T n _ _ v P P . U U e B B x L L a I I m C C p _ _ l S B e I A T S E E _ _ U P R A L T = H h = t t p : / / l o c a l h o s t : 3 0 0 0 Usage Installation g c n i d p t m n c e i l x n o t s n j t e s a - l [ i l r 1 e 8 p n o - s t i h t e o m r e y s - - u s r s l g ] - t e m p l a t e Development n p m r u n d e v Build n p m r u n b u i l d Customization Points Adding languages: src/i18n/routing.ts and messages/ directory Adding pages: Create new directories under src/app/[locale]/ Theme customization: tailwind.config.js and global CSS Metadata: generateMetadata function in each page Best Practices Component naming: Use PascalCase Translation keys: Organize with nested structure Type safety: Maximize use of TypeScript types Performance: Cache strategy utilizing static generation Summary This template aims to enable quick construction of static sites optimized for SEO, with built-in internationalization and dark mode features. The goal is to improve developer productivity while providing an excellent experience for end users. ...

July 26, 2025 · 6 min · Nakamura

How to Implement sitemap.ts When Using output: 'export' in Next.js 15

This article was written by AI after a human verified the implementation. Background When using static site generation (output: 'export') in Next.js 15, you may encounter an error with the sitemap.ts implementation: E r r o r : e x p o r t c o n s t d y n a m i c = " f o r c e - s t a t i c " / e x p o r t c o n s t r e v a l i d a t e n o t c o n f i g u r e d o n r o u t e " / s i t e m a p . x m l " w i t h " o u t p u t : e x p o r t " . Solution This problem can be solved by adding the following two exports to sitemap.ts: ...

July 26, 2025 · 5 min · Nakamura

Testing IIIF Authentication API 2.0

Overview I had the opportunity to test the IIIF Authentication API 2.0, so here are my notes. https://iiif.io/api/auth/2.0/ I created the following demo site. https://iiif-auth-nextjs.vercel.app/ja The repository is available here. https://github.com/nakamura196/iiif-auth-nextjs The following explanation is AI-generated. Note that I was unable to get it working with Mirador, which remains a future task. Overview This article explains the authentication flow of IIIF Authentication API 2.0 in detail at the HTTP request/response level. We will trace what requests are sent and what responses are returned at each step. ...

July 25, 2025 · 19 min · Nakamura

Introducing GitHub File History Analyzer: A Tool for Analyzing File Edit History with AI

This article was created by AI. Introduction Have you ever wanted to analyze the edit history of files managed in a GitHub repository? There are cases where you want to understand change patterns of files that have been updated over a long period, or the evolution process of a project. GitHub File History Analyzer is a command-line tool developed to meet such needs. Tool Overview This tool provides the following features: ...

July 24, 2025 · 6 min · Nakamura

Trying Odeuropa-Related Tools

Overview I had the opportunity to try tools related to Odeuropa, so this is a memo about that experience. What is Odeuropa? An explanation is available on the following page. https://odeuropa.eu/ Below is a machine-translated description. Odeuropa is an innovative EU-funded project that studies Europe’s “olfactory cultural heritage.” Project objectives: To investigate and document the role that smells have played in European culture from 1600 to 1920. Using cutting-edge AI technology, it extracts smell-related information from approximately 43,000 images and 167,000 historical texts (in English, Italian, French, Dutch, German, and Slovenian). ...

July 24, 2025 · 19 min · Nakamura

Trying AllegroGraph

Overview I had the opportunity to try AllegroGraph, so this is a memo of my experience. https://allegrograph.com/ Usage There appear to be several setup methods, but I will try the following cloud version. https://allegrograph.cloud/ After setup, the following screen is displayed. After logging in, multiple repositories are displayed. Enabling Anonymous Access For example, the SPARQL endpoint for the “actors” repository is: https://ag1edt2www58hzzy.allegrograph.cloud/repositories/actors/sparql By default, Basic authentication is required. ...

July 16, 2025 · 11 min · Nakamura

Fixing the 'ref' Bug in DHConvalidator

This article was partially written by AI. Overview DHConvalidator is a tool for converting Digital Humanities (DH) conference abstracts into a consistent TEI (Text Encoding Initiative) text base. https://github.com/ADHO/dhconvalidator When using this tool, the following error occurred during the conversion process from Microsoft Word format (DOCX) to TEI XML format: E R R O R : n u . x o m . P a r s i n g E x c e p t i o n : c v c - c o m p l e x - t y p e . 2 . 4 . a : I n v a l i d c o n t e n t w a s f o u n d s t a r t i n g w i t h e l e m e n t ' r e f ' This article shares the cause and solution for this issue. ...

June 27, 2025 · 23 min · Nakamura

Building an MCP Server for Searching the Koui Genji Monogatari Text DB

Overview This is a memo on building an MCP server for searching the Koui Genji Monogatari Text DB. As an example, it can be used from Claude Desktop as follows: https://youtu.be/8s2R9V2hEvc?si=p9SW-IvhdNSzwTLN Background In the following article, I introduced the construction of an API server for searching the Koui Genji Monogatari Text DB. As an application of this, I built an MCP server to try interacting with AI agents. ...

June 26, 2025 · 3 min · Nakamura

Building an API Server for Searching the Koui Genji Monogatari Text DB

Overview I built an API server for searching the Koui Genji Monogatari (Collated Tale of Genji) Text DB, so here are my notes. https://genji-api.aws.ldas.jp/ Background The following page publishes the text data of “Koui Genji Monogatari” in a TEI/XML-compliant format. https://kouigenjimonogatari.github.io/ This text data is registered in Elasticsearch to create an API that enables searching by text segments. Usage The usage documentation page using OpenAPI and Swagger is accessible at the following URL: ...

June 25, 2025 · 25 min · Nakamura

Creating a Castle Generation Command as a Minecraft Mod [Fabric 1.21 + Claude]

Note: Most of this article was written by AI. Introduction For the purpose of learning Minecraft Mod development, I created a Mod that generates a castle with a single command. Development Environment The technology stack used: Minecraft: 1.21 Modding Framework: Fabric Mod Java: 21 Development Environment: Cursor (AI-integrated editor) AI Assistance: Claude 4 Sonnet Environment Setup Java 21 installation was needed, so I installed it with Homebrew: b r e w i n s t a l l o p e n j d k @ 2 1 Project initialization was done by cloning Fabric’s official template: ...

June 16, 2025 · 5 min · Nakamura

NFT Support for the Digital Cultural Heritage Management System (Prototype)

Notice: 2025-06-14 Development progress is summarized here. https://zenn.dev/nakamura196/books/41693d2d017082 Overview Starting with the following article, I have been prototyping a digital cultural heritage management system using blockchain. This time, I modified the system so that uploaded data is recognized as NFTs. This is a learning process, so there may be incomplete aspects, but I hope it serves as a helpful reference. Usage Page The file upload method remains the same as before. A link to the detail page was added to the list page displayed after upload. ...

June 12, 2025 · 11 min · Nakamura

Prototyping a Digital Cultural Heritage Management System Using Blockchain and Pinata IPFS

Notice: 2025-06-14 The development progress is summarized at the following link. https://zenn.dev/nakamura196/books/41693d2d017082 Overview As part of learning blockchain technology, I created a prototype management system for digital cultural heritage. Since the purpose is learning blockchain, there are many missing features, but I plan to add and improve them in the future. https://digital-heritage-five.vercel.app/ Technologies Used The Ethereum Sepolia network is used. Since the purpose is blockchain learning and prototype development, a test network is used. Pinata is used as the hosting service for the distributed file storage IPFS. https://pinata.cloud/ ...

June 12, 2025 · 7 min · Nakamura