3
1

More than 5 years have passed since last update.

Redmineの label/notice/error/field/setting/permission/button メッセージに”にょ”を付加する(今のところPostgresだけ)

Last updated at Posted at 2019-05-20

2019/05/18(土)に行われた、第16回redmine.tokyo勉強会でファーエンドテクノロジーの石川さんから、redmine_message_customizeプラグインの発表がありました。

これはいいオモチャをいただいた!ということで、Redmineのメッセージを安全にいじって遊ぶことにします。
出オチなので、変数や句点の不整合は無視してます。

スクリプト

redmine_nyan.sh
#!/bin/bash
#####################################################
# 環境依存値
DB_NAME=db_redmine
PG_USER=postgres
LOCALE_FILE=/opt/redmine/config/locales/ja.yml
SUFFIX="にょ"
# 固定置換用
declare -A FIX_REP
FIX_REP["button_submit"]="目からビーム"
#####################################################
PID=$$

if [ "$1" == "RESET" ]; then

cat << EOS > /tmp/${PID}.sql
UPDATE settings
   SET value=E'--- \n:custom_messages: {} \n'
 WHERE name='plugin_redmine_message_customize'
EOS

else
  IFS_BACKUP=$IFS
  IFS=$'\n'
  declare -a NOTICES=( $(grep -E '^  (label|notice|error|field|setting|permission|button)' ${LOCALE_FILE} ) )


  for NOTICE in ${NOTICES[@]}
  do
    MSG_KEY=$(echo $NOTICE | awk -F': ' '{print $1}' | sed -e 's/ //g' )
    MSG_VALUE=$(echo $NOTICE | awk -F': ' '{c="";for(i=2;i<=NF;i++) c=c $i": "; print c}' | sed -e 's/: $//g' )

    # 下のいずれでもない
    REP_PTN=0
    # 固定置換あり
    if [ "${FIX_REP[${MSG_KEY}]}" != "" ]; then
      REP_PTN=1
    fi
    # 句点を含む
    echo ${MSG_VALUE} | grep -E '。' > /dev/null
    if [ $? -eq 0 -a "${REP_PTN}" == "0" ]; then
      REP_PTN=2
    fi
    # ダブルクォートで終わる
    echo ${MSG_VALUE} | grep -E '"$' > /dev/null
    if [ $? -eq 0 -a "${REP_PTN}" == "0" ]; then
      REP_PTN=3
    fi
    # シングルクォートで終わる
    echo ${MSG_VALUE} | grep -E "'$" > /dev/null
    if [ $? -eq 0 -a "${REP_PTN}" == "0" ]; then
      REP_PTN=4
    fi
    # コロンで終わる
    echo ${MSG_VALUE} | grep -E ":$" > /dev/null
    if [ $? -eq 0 -a "${REP_PTN}" == "0" ]; then
      REP_PTN=5
    fi

    case "${REP_PTN}" in
    "0" ) MSG_VALUE=$(echo ${MSG_VALUE} | sed -e "s/$/${SUFFIX}/g") ;;
    "1" ) MSG_VALUE=${FIX_REP[${MSG_KEY}]} ;;
    "2" ) MSG_VALUE=$(echo ${MSG_VALUE} | sed -e "s/。/${SUFFIX}。/g") ;;
    "3" ) MSG_VALUE=$(echo ${MSG_VALUE} | sed -e "s/\"$/${SUFFIX}\"/g") ;;
    "4" ) MSG_VALUE=$(echo ${MSG_VALUE} | sed -e "s/'$/${SUFFIX}'/g") ;;
    "5" ) MSG_VALUE=$(echo ${MSG_VALUE} | sed -e "s/:$/${SUFFIX}:   /g") ;;
    esac

    MSG_VALUE=$(echo ${MSG_VALUE} | sed -e "s/'/''/g")

    MSG+="    ${MSG_KEY}: ${MSG_VALUE}\n"
  done

cat << EOS > /tmp/${PID}.sql
UPDATE settings
   SET value=E'--- \n:custom_messages: \n  ja:\n${MSG}'
 WHERE name='plugin_redmine_message_customize'
EOS
fi

IFS=$IFS_BACKUP

sudo su - ${PG_USER} -c "psql ${DB_NAME} -f /tmp/${PID}.sql"
rm -f /tmp/${PID}.sql

sudo systemctl restart redmine

使い方

  • メッセージ設定
./redmine_nyan.sh

語尾をつけるのではなく、固定で置換したい場合はFIX_REP の行をコピーして増やしてください。

  • メッセージ設定取消
./redmine_nyan.sh RESET

結果

image.png

注意点

  • あらかじめ redmine_message_customize をインストールしておいてください。
    • redmineの再起動が必要です。
    • 「管理」→「メッセージをカスタマイズする」メニューを表示し、いったん保存してください。
      • settingsテーブルにレコードを作成するためです。
  • 今のところ、PostgreSQL11でしか確認していません。
  • 対象のメッセージを多くしすぎると、MySQLではTEXTカラムの64KB制限に引っかかると思います。

変更

  • 2019/09/04
    • labelを追加したので、末尾が”:”のパターンを考慮
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1