import React, { useState, useRef } from 'react';
import { Button } from '@/components/ui/button';
import { Textarea } from '@/components/ui/textarea';
const TextTransformer = () => {
const [transformedText, setTransformedText] = useState('');
const textDivRef = useRef(null);
// 口語体から文語体への変換マップ
const conversionalToLiterary = {
'だ': 'なり',
'です': 'なり',
'ます': 'き',
'る': 'り',
'たい': 'たし',
'いる': 'をり',
'てる': 'てをり',
'けど': 'しかども',
'から': 'に由りて',
'ので': 'に因りて',
'けれど': 'しかれども',
'でも': 'しかしながら',
'もう': 'すでに'
};
const transformText = (text) => {
// 口語体から文語体への変換
Object.entries(conversionalToLiterary).forEach(([spoken, literary]) => {
text = text.replace(new RegExp(spoken, 'g'), literary);
});
// 読点の後の改行を削除
text = text.replace(/、\\\\n/g, '、');
// 句点の後に改行を追加し、意味段落の終わりにさらに改行を入れる
text = text.replace(/。/g, '。\\\\n\\\\n');
// 最後の余分な改行を削除
text = text.trim();
return text;
};
const handleTextTransform = (e) => {
const inputText = e.target.value;
const transformed = transformText(inputText);
setTransformedText(transformed);
};
const copyToClipboard = () => {
if (textDivRef.current) {
navigator.clipboard.writeText(textDivRef.current.innerText)
.then(() => alert('クリップボードにコピーしました'))
.catch(err => console.error('コピーに失敗しました', err));
}
};
return (
<div className="p-4 max-w-2xl mx-auto">
<h2 className="text-xl font-bold mb-4">日本語テキスト変換ツール</h2>
<Textarea
placeholder="変換したいテキストをここにペーストしてください"
onChange={handleTextTransform}
className="mb-4"
/>
<Button
onClick={copyToClipboard}
className="mb-4"
>
変換テキストをコピー
</Button>
<div
ref={textDivRef}
className="border p-4 whitespace-pre-wrap bg-gray-50"
>
{transformedText}
</div>
</div>
);
};
export default TextTransformer;
このReactコンポーネントは、以下の機能を持つ日本語テキスト変換ツールです:
変換のポイント:
使用上の注意:
@/components/ui/
パスが設定されている必要がありますカスタマイズや追加の変換ルールが必要な場合は、conversionalToLiterary
オブジェクトやtransformText
関数を修正することで対応できます。