Redmine의 label/notice/error/field/setting/permission/button 메시지에 "Nyo"를 추가합니다 (현재 Postgres 전용)

4102 단어 Redmine
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
    

    결과





    주의점


  • 미리 redmine_message_customize를 설치하십시오.
  • redmine을 다시 시작해야 합니다.
  • "관리"→ "메시지 사용자 정의"메뉴를 표시하고 일단 저장하십시오.
  • settings 테이블에 레코드를 작성하기 때문입니다.


  • 지금은 PostgreSQL11에서만 확인하고 있습니다.
  • 대상의 메세지를 너무 많이 하면, MySQL에서는 TEXT 컬럼의 64KB 제한에 걸린다고 생각합니다.

  • 변경


  • 2019/09/04
  • label을 추가했으므로, 말미가 “:”의 패턴을 고려

  • 좋은 웹페이지 즐겨찾기