Package io.github.zazalng
This package provides a comprehensive API for converting BigDecimal monetary
amounts into language-specific text describing baht (บาท) and satang (สตางค์). The conversion
respects linguistic conventions for digit naming and currency formatting in the selected language.
Version 2.0.0 Features (NEW):
- Pluggable Language Handlers: Implement
LanguageHandlerto add ANY language without modifying core code - Zero Enum Coupling: Languages no longer locked to fixed enum - unlimited extensibility
- Built-in Handlers:
ThaiLanguageHandlerandEnglishLanguageHandlerprovided - Backward Compatible: v1.4.0 code works unchanged via soft compatibility builders
- Thread-Safe Configuration: Immutable config objects for safe concurrent access
Public API
The main entry points for users are:
ThaiBaht- Static utility methods and instance-based fluent API for converting amounts to language-specific textThaiBahtConfig- Immutable configuration for controlling output formatting, including language handler selection, unit word inclusion, and negative prefixesLanguageHandler- Interface for implementing custom language handlersLanguage- Enum defining built-in languages (THAI, ENGLISH) - backward compat only
Internal implementation classes such as io.github.zazalng.handler are package-private
and not part of the public API surface.
Usage Examples
Thai Output (Default - Using Handler)
import java.math.BigDecimal;
import io.github.zazalng.ThaiBaht;
import io.github.zazalng.handler.ThaiLanguageHandler;
// v2.0.0 recommended approach
ThaiBahtConfig config = ThaiBahtConfig.builder(new ThaiLanguageHandler())
.useUnit(true)
.build();
String text = ThaiBaht.of(new BigDecimal("1234.56"), config);
// Returns: "หนึ่งพันสองร้อยสามสิบสี่บาทห้าสิบหกสตางค์"
// Or use convenience one-liner (backward compatible)
String text = ThaiBaht.of(new BigDecimal("1234.56"));
// Returns: "หนึ่งพันสองร้อยสามสิบสี่บาทห้าสิบหกสตางค์"
English Output (Using Handler)
import java.math.BigDecimal;
import io.github.zazalng.ThaiBaht;
import io.github.zazalng.handler.EnglishLanguageHandler;
ThaiBahtConfig config = ThaiBahtConfig.builder(new EnglishLanguageHandler())
.useUnit(true)
.build();
String text = ThaiBaht.of(new BigDecimal("1234.56"), config);
// Returns: "One Thousand Two Hundred Thirty-Four Baht Fifty-Six Satang"
Custom Language Handler (v2.0.0 NEW)
import io.github.zazalng.contracts.LanguageHandler;
public class LaotianLanguageHandler implements LanguageHandler {
@Override public String convert(ThaiBaht baht) { return ...// conversion logic }
@Override public String getLanguageCode() { return "lo"; }
@Override public String getLanguageName() { return "Laotian"; }
@Override public String getUnitWord() { return "ກີບ"; }
@Override public String getExactWord() { return "ເທົ່າ"; }
@Override public String getSatangWord() { return "ແອັດ"; }
@Override public String getNegativePrefix() { return "ລົບ"; }
}
// Use immediately - no core library changes!
ThaiBahtConfig config = ThaiBahtConfig.builder(new LaotianLanguageHandler())
.useUnit(true)
.build();
String text = ThaiBaht.of(new BigDecimal("1234.56"), config);
Backward Compatibility (v1.4.0 Code Still Works)
import io.github.zazalng.contracts.Language;
// v1.4.0 style - still works in v2.0.0
ThaiBahtConfig config = ThaiBahtConfig.builder(Language.ENGLISH)
.useUnit(true)
.build();
// Internally creates EnglishLanguageHandler
Instance-Based Fluent API
import io.github.zazalng.ThaiBaht;
import io.github.zazalng.handler.ThaiLanguageHandler;
ThaiBaht converter = ThaiBaht.create(new BigDecimal("100.00"))
.config(b -> b
.languageHandler(new ThaiLanguageHandler())
.useUnit(true)
);
String text = converter.toString();
// Returns: "หนึ่งร้อยบาทถ้วน"
Custom Configuration
ThaiBahtConfig config = ThaiBahtConfig.builder(new ThaiLanguageHandler())
.useUnit(true)
.setPrefix("ติดลบ") // Custom negative prefix
.build();
String negative = ThaiBaht.of(new BigDecimal("-100.50"), config);
// Returns: "ติดลบหนึ่งร้อยบาทห้าสิบสตางค์"
v2.0.0 Architecture Highlights
Version 2.0.0 introduces a breakthrough design: Before v2.0.0, languages were locked in the Language enum (Limited extensibility). After v2.0.0, languages implement LanguageHandler interface (Unlimited extensibility). Benefit: Add any language without modifying core code. Compatibility: Soft backward compatibility via builders - v1.4.0 code still works.
Migration from v1.4.0 to v2.0.0
No changes required! Existing code continues to work. To adopt v2.0.0 syntax:
// Old (still works)
ThaiBahtConfig config = ThaiBahtConfig.builder(Language.THAI).build();
// New (recommended)
ThaiBahtConfig config = ThaiBahtConfig.builder(new ThaiLanguageHandler()).build();
- Since:
- 1.0
- Version:
- 2.0.0
- Author:
- Zazalng
- See Also:
-
ClassesClassDescriptionPrimary entry point for converting monetary amounts (
BigDecimal) into beautifully formatted Thai Baht text in multiple languages.Immutable configuration object that controls all aspects of currency text conversion.Builder for constructing immutableThaiBahtConfiginstances.